2013-04-22 46 views
9

考慮以下文件:

{ 
    "_id" : "ID_01", 
    "code" : ["001", "002", "003"], 
    "Others" : "544554" 
} 

我通過這個MongoDB doc for elemmatch-query & elemmatch-projection去了,但沒能弄明白如何使用相同的上述文件。

誰能告訴我如何使用$elemMatch作爲域代碼?

+1

是'$ in'真的是你要尋找的是什麼? [docs](http://docs.mongodb.org/manual/reference/operator/in/) – WiredPrairie 2013-04-22 10:51:46

+1

您當前的查詢和您試圖實現的結果的示例將非常有用。這聽起來像你想要一個'$ in'查詢。 – Stennie 2013-04-22 13:04:27

+0

@WiredPrairie:是的,完全...謝謝它的工作.. – 2013-04-22 13:33:31

回答

8

由於$in可用於在特定字段內搜索值(或多個值),因此您會希望在此情況下使用$in運算符而不是$elemMatch。 $ in需要一個值列表作爲數組傳遞。此外,對於您的情況,它會查找單個值,或通過搜索一組值。整個匹配文檔被返回。

例如,你可能會使用這樣的:

db.mycodes.find({ code: { $in: ["001"] } }) 

這可以簡化爲僅僅是:

db.mycodes.find({ code: "001" }) 

如MongoDB的將查找的數組,像上面一根火柴( "001")。

或者,如果你要搜索"001""002"

db.mycodes.find({ code: { $in: ["001", "002"] } }) 

$in documentation

+0

$ in只接受數組:「無法canonicalize查詢:BadValue $需要一個數組」 – 2015-01-14 10:07:47

+0

@RaxWunter - 正確。不確定爲什麼我這樣做,因爲我確實證實了它的行爲方式從2.6開始。謝謝! (這是從2013年4月開始,所以控制檯或數據庫中的內容可能會發生變化......不知道發生了什麼:)) – WiredPrairie 2015-01-14 14:05:35

2

如果你只是尋找匹配包含給定值的陣列中的所有文件,你可以指定對該數組的引用的值,例如

db.mycodes.find({ code: '001' }) 

這因此會回報你,在他們code陣列包含'001'所有文件

+0

就是這樣!謝謝。 – thomas 2014-12-09 23:37:09