2015-12-10 128 views
0

查找元素我有一個簡單的數組在我的MongoDB集合:MongoDB的:在一個陣列

"_id": "5669b4930874f8d01f7676da", "cars": ["BMW", "Audi", "VW"] 

我現在要檢查,如果「奧迪」是文件內。我已經在SO上讀過關於數組的所有問題,但他們都將注意力集中在內部的對象上,這裏不是這種情況。

db.collectionName.find({ cars: {$eq: "Audi"} }) 

不起作用(它不返回任何文檔)。

編輯:這是我自己的愚蠢,看到我的評論下面的最佳解決方案。所以上面的查詢是總是工作。就像他們說的問題總是坐在鍵盤;-)

無論前面做:

db.collectionName.find({ $elemMatch: { cars: "Audi" }}) 

它實際上導致了以下錯誤消息:

error: { 
"$err" : "Can't canonicalize query: BadValue unknown top level operator: $elemMatch", 
"code" : 17287 

或:

db.collectionName.find({ cars: { $in: "Audi" }}) 

這將導致以下錯誤:

error: { 
"$err" : "Can't canonicalize query: BadValue $in needs an array", 
"code" : 17287 

通過MongoDB shell對MongoDB 2.6.7版進行測試。謝謝你的幫助!

回答

1

可以簡化:

db.collectionName.find({ cars: "Audi" }) 

應該很好地工作。

db.collectionName.find({ cars: { $in: ["Audi"] }}) 

也可以工作,但首先是更簡單。

+0

這是我的問題是愚蠢的。我實際上創建了這個汽車的例子,但在我的集合中,我用的是(在這裏使用相同的例子)搜索「福特」,這顯然不在數組中,因此我得到了0個文檔。謝謝,花了30分鐘試圖弄清楚爲什麼你的工作和我的不是。 – a4xrbj1

+1

啊,它發生;-) –

0

此查詢似乎爲我工作:

db.cars.find({cars: {$elemMatch:{$eq:"BMW"}} }) 

結果

{ "_id" : ObjectId("5669ca2ff0fbefa0650e5fb6"), "cars" : [ "Audi","BMW", "Honda" ] }