获取与标准不匹配的集合中的所有文档

时间:2016-03-04 12:20:02

标签: javascript node.js mongodb

我有一个给定的查询collection,可能会也可能不会返回criteria的某些文档。 我想得到所有不满足collection的文件。 所以基本上collection.find(criteria)中的所有文档如果使用collection.find({$not: criteria})都无法找到。

我有两种方法:

  1. 取消查询。我尝试了criteria,这会引发错误。
  2. 获取所有文档并减去与collection.find()匹配的文档:collection.find(criteria) \ {{1}} 使用" \"作为补充算子。 - 但我不知道该怎么做。
  3. 你能在Javascript / Node中给我一个代码示例吗?

2 个答案:

答案 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操作,其中:

  

采用两个集合并返回一个仅包含元素的数组   存在于第一组