2016-03-04 28 views
0

我有一个给定的查询criteria,它可能会或可能不会返回collection的某些文档。 我想获得所有文件,不符合criteria。 因此,基本上所有的文件collection,如果我使用collection.find(criteria)将不会被发现。获取不符合标准的所有收集文档

我有两种方法:

  1. 否定查询。我尝试了collection.find({$not: criteria}),它引发了一个错误。
  2. 获取所有文件并且与criteria相匹配的文件缩小:collection.find() \ collection.find(criteria) 以“\”为补全运算符。 - 但我不知道该怎么做。

你能给我一个Javascript/Node中的代码示例吗?

+0

你提到的'criteria'是什么细节?否则,你的问题可能会被关闭,因为它似乎太董事会... – zangw

+0

@zangw可以用https://docs.mongodb.org/manual/reference/operator/query/#query-selectors构建任何东西,比如'{ $和:[ {name:{$ exists:true}}, {url:{$ exists:true}}] }; ' – Strernd

+0

可能是什么?也许这很难回答你的答案... – zangw

回答

0

我想你的查询必须是这样的:

db.collection.find({ field: { $nin: [ "value_1", "value_2" ] } }); 

$not是与其他比较操作等混合:

db.inventory.find({ price: { $not: { $gt: 1.99 } } }) 
+0

这将工作。但我无法改变给定的“标准”。我明确要求当我有一个给定的“标准”时要做什么 – Strernd

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; 
}); 

对于更具体的实现,有一看$setDifference操作,其中:

注意到两组,并返回包含仅 在第一组中存在的元素的数组

+0

是否可以在游标上执行补充操作? – Strernd

+0

有关$ setDifference – duncanhall

+0

的其他注释不是'$ setDifference'仅适用于数组的属性(文档)吗? – Strernd

相关问题