我有一个给定的查询collection
,可能会也可能不会返回criteria
的某些文档。
我想得到所有不满足collection
的文件。
所以基本上collection.find(criteria)
中的所有文档如果使用collection.find({$not: criteria})
都无法找到。
我有两种方法:
criteria
,这会引发错误。collection.find()
匹配的文档:collection.find(criteria)
\ {{1}}
使用" \"作为补充算子。 - 但我不知道该怎么做。你能在Javascript / Node中给我一个代码示例吗?
答案 0 :(得分:0)
我认为你的查询必须是这样的:
db.collection.find( { field: { $nin: [ "value_1", "value_2" ] } } );
$not
用于与其他比较运算符混合,例如:
db.inventory.find( { price: { $not: { $gt: 1.99 } } } )
答案 1 :(得分:0)
尝试使用$not
时抛出的错误(无论可能是什么)表明您没有正确使用它。 Mongo $not documentation显示以下示例:
db.inventory.find( { price: { $not: { $gt: 1.99 } } } )
如果您的criteria
是一个复杂的查询,这将无效。您需要将其细分为每个字段的单独条件,并适当地应用它。
或者,要查找另一组中不存在的项目集(补充),您可以尝试以下内容:
var setA = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
var setB = ['c', 'd', 'g'];
var complement = setA.filter(function (item) {
return setB.indexOf(item) === -1;
});
有关Mongo特定的更具体的实现,请查看$setDifference操作,其中:
采用两个集合并返回一个仅包含元素的数组 存在于第一组