2015-03-02 175 views
2

我期待在MongoDB中執行相當於$setIsSubsethttp://docs.mongodb.org/manual/reference/operator/aggregation/setIsSubset/的常規(即非聚合)查詢。我怎樣才能做到這一點?

假設我有證件

{ 'x' : ['A', 'B'] } 
{ 'x' : ['A', 'D'] } 

filter = ['A', 'B', C'] 

我想做一個 find({"x" : {'$setIsSubSet':filter}}),並期望只找回

{ 'x' : ['A', 'B'] } 

這似乎是最條件命令匹配任何不是全部。我也希望它是一個子集,所以看起來$and$all將不匹配[A,B][A,B,C]

回答

4

你可以嘗試在shell下:

var filer = ['A', 'B', 'C'] 
db.coll2.find({x: {"$not": {"$elemMatch": {"$nin" : filer }}}}) 

輸出

 
    { "_id" : ObjectId("54f4d72f1f22d4a529052760"), "x" : [ "A", "B" ] }

+0

這雙重否定是如此怪異,但就像你說的,它的工作原理。我不知道它的表現是什麼? – FuriousGeorge 2015-03-03 02:11:27

+0

你有什麼想法我可以修改這個,所以如果'x'包含一個數組數組(即[['A','B'])而不是一個元素數組?我想展開數組的數組並像以前一樣匹配各個元素,而不必與數組匹配。 – FuriousGeorge 2015-03-03 16:25:46