2012-07-25 100 views
2

如何完成以下操作?mongodb數組匹配

db.test.save({a: [1,2,3]}); 

db.test.find({a: [1,2,3,4]}); //must match because it contains all required values [1, 2, 3] 
db.test.find({a: [1,2]}); //must NOT match because the required value 3 is missing 

我知道$ in和$ all,但他們的工作方式不同。

回答

1

有趣的問題是,$ in和$或者操作符被應用到數組的元素上,您正在比較集合中的每個文檔,而不是數組中的元素文件..總結您的問題:如果集合中的任何文檔碰巧是傳遞數組的子集,您希望它匹配。除非您交換您的輸入和輸出,否則我無法想出辦法做到這一點。我的意思is..Let的把你的第一個輸入:

db.test.find({a: [1,2,3,4]});

考慮把這個在臨時採集說,溫度爲:

db.temp.save({a: [1,2,3,4]});

現在遍歷每個文檔中測試集和「找到'它在溫度與$所有運營商,以確保它是完全包含,即做這樣的事情:

foreach(doc in test)
{ db.temp.find({ a: { $all: doc.a } }); }


這絕對是一個解決方法!我不確定是否缺少能夠完成這項工作的其他操作員。