我有一个数据集,看起来像:
{"key": "abc", "val": 1, "status": "np"}
{"key": "abc", "val": 2, "status": "p"}
{"key": "def", "val": 3, "status": "np"}
{"key": "ghi", "val": 4, "status": "np"}
{"key": "ghi", "val": 5, "status": "p"}
我想要一个返回状态=“np”的文档的查询,但仅在存在具有相同键的其他文档没有状态值“p”的情况下。因此,从上述数据集返回的文档将是 key=“def”,因为 “abc” 的值为 “np”,但 “abc” 也有一个值为 “p” 的文档。对于key=“ghi”也是如此。我想出了一些接近的东西,但我认为$nin运算符不支持 q 不同的查询。
db.test2.find({$and: [{"status":"np"}, {"key": {$nin:[<distinct value query>]]})
如果我要硬编码$nin数组中的值,它会工作:
db.test2.find({$and: [{"status":"np"}, {"key": {$nin:['abc', 'ghi']}}]})
我只需要能够在方括号内写一个查找。我可以做这样的事情:
var res=[];
res = db.test2.distinct("key", {"status": "p"});
db.test2.find({$and: [{"status":"np"}, {"key": {$nin:res}}]});
但问题是,在两个查询之间的时间内,另一个进程可能会更新文档的“状态”,然后我会得到不一致的数据。
试试这个
db.so.aggregate([
{$group: {'_id': '$key', 'st': {$push: '$status'}}},
{$project :{st: 1, '$val':1, '$status':1, 'hasNp':{$in:['np', '$st']}, hasP: {$in:['p', '$st']}}},
{$match: {hasNp: true, hasP: false}}
]);
我的示例用例是查询没有阻止用户的人的数据,可以阻止用户的人数没有限制 所以我的查询看起来像 所以$nin操作符中的Array项的数量可能会增长到一个潜在的大数字,那么MongoDB中的这个数组的大小有限制吗?
问题内容: 具体来说,我想创建一个Array类,并希望重载[]运算符。 问题答案: 如果您正在使用PHP5(应该如此),请查看SPL ArrayObject 类。文档不是太好,但是我认为如果扩展ArrayObject,您将拥有“假”数组。 编辑:这是我的简单示例;恐怕我没有有价值的用例:
问题内容: 我想知道是否可以在@Query批注中包含子查询(org.springframework.data.jpa.repository.Query;) 我在第一个子查询括号上得到QuerySyntaxException。 这是我的查询 谢谢! 问题答案: 不可以,JPQL查询的select子句中不能包含子查询。 JPQL在WHERE和HAVING子句中支持子查询。它可以(至少)是ANY,SOM
问题内容: 我必须转换一个传递查询的MSSQL存储过程: 这不起作用。我敢肯定,而不是MySQL的命令,但也不管用。 有谁知道是否有可能为MySQL提供类似JavaScript的功能? 问题答案: EXECUTE是MySQL中的有效命令。MySQL参考手册
问题内容: 上面的语句返回3行。但是下面的语句仅返回2行。 我知道为什么会这样,但是有一种方法可以强制item_id 1返回两次? 我要退货的示例: id-> 1筹码€2.50 id-> 1筹码€2.50 id-> 2可口可乐€1.60 -------------------- 总计€6.60 问题答案: 您可以加入另一个表,例如 或者只是在您的应用程序中复制它们。 您实际上不需要做您所要的。
问题内容: 我在PHP循环中生成一条SQL语句。 生成的SQL字符串是大量的单个SQL语句,如下所示: 等等… 然后我执行: 问题在于仅执行前312条语句,而不执行完整的2082行(表中仅插入312行)。 当我将变量输出到JavaScript控制台,然后在SSMS中手动执行它时,它可以完美工作并插入所有2082行。只有当我运行变量时,它才能完成。 我也没有收到任何错误,查询结果返回真,如以下代码所