2016-01-04 50 views
1

我有一個蒙戈集合查找查詢從指定數組

{"_id" : ObjectId("asdf"), "employee" : {"name": "Bob"}} 
{"_id" : ObjectId("1234"), "employee" : {"name": "Rob"}} 

所有我只想做一個簡單的查詢從我的陣列員工的名稱的兩個JSON文檔。

我試圖

db.myCollection.find({"employee.name": "Bob"}) 

這工作,只返回1號文件。

db.myCollection.find({"employee.name": ["Bob", "Rob"]}) 

沒有工作。犯規返回任何

db.myCollection.find({"employee.name": "Bob", "Rob"}) 

語法錯誤

db.myCollection.find({"employee.name": {$all : ["Bob", "Rob"]} }) 

不工作。不返回任何東西

我知道這是一個非常簡單的查詢。但無法弄清楚語法。

回答

1

提供的所有值運營商,請參閱documentation

db.myCollection.find({"employee.name":{$in:["Bob","Rob"]}}) 

$all運算符不返回任何文檔,因爲它選擇字段值爲包含所有指定元素的數組的文檔。下面的記錄將滿足這個條件:

{"_id" : ObjectId("asdf"), "employee" : {"name": ["Bob","Rob"]}} 

上面記錄也會被這個查詢返回:

db.myCollection.find({"employee.name": ["Bob", "Rob"]}) 

最後,下面的查詢會拋出一個無效的語法錯誤,如{"employee.name": "Bob", "Rob"}是不是一個有效的JSON \ BSON文件:

db.myCollection.find({"employee.name": "Bob", "Rob"}) 
+0

工作就像魅力:) –

2

嘗試使用$in操作

查詢db.myCollection.find({"employee.name": { $in: ["Bob", "Rob"] }})

對於您所嘗試的選項,

db.myCollection.find({"employee.name": "Bob"}) 

這將有 「鮑勃」 的名字返回的記錄,使這就是爲什麼它只返回一條記錄。

db.myCollection.find({"employee.name": ["Bob", "Rob"]}) 

爲我們提供了這個選項[「鮑勃」,「搶」]匹配值,這實際上是和數組,所以它會返回記錄與名稱相同的陣列。

db.myCollection.find({"employee.name": "Bob", "Rob"}) 

對於此選項,因爲雅科說,這不是一個有效的JSON格式。

db.myCollection.find({"employee.name": {$all : ["Bob", "Rob"]} }) 

此選項將嘗試找到名稱字段的值的記錄作爲數組使得價值數組包含您需要使用$in$all

0

根據上述描述作爲替代解決方案,請嘗試執行以下查詢,假設全部文件需要取

db.getCollection( 'MyCollection的')找到({},{_ ID:0, 'employee.name':1})。

上面的查詢獲取所有的文件從收集利用投影文件檢索關於MongoDB的投影文件中的ResultSet

特定領域的更多詳細應將描述請參見下面的文檔,如下面的URL

https://docs.mongodb.org/manual/tutorial/project-fields-from-query-results/

提到