2016-03-04 44 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

相關問題