2017-02-23 93 views
0

值那麼我的收藏是一樣的東西:查找陣列

[ 
    {"name": "one", "jobs": ["1","2","3","4","5"]}, 
    {"name": "two", "jobs": ["6","7","8","9","10"]}, 
    {"name": "three", "jobs": ["11","12","13","14","15"]}, 
] 

我想創建一個查詢,以查找基於從jobs值的名稱。所以如果jobs=2,名稱應該是one;如果jobs=9,名稱應該是two;如果jobs=13,則該名稱應該是three。我怎麼放在 db.collection.find({ ?? })

感謝。

回答

1

只是補充對方的回答,如果你從一系列的工作想搜索,你可以這樣做:如果你想獲得一個

db.collection.find({jobs:{$in:["13","14"]}},{name:1}) 

切片這個數組,你可以使用切片運算符。它有兩個參數:第一個是初始索引,第二個是該索引之後的元素數。下面是一個例子:

db.tasks.find({jobs:{$in:["13","14"]}},{name:1,jobs:{$slice : [0,2]}}) 

這將需要元件從該陣列的索引[0]。

+0

這不起作用。該名稱不被返回。如果我想要返回工作號碼,我該怎麼辦?謝謝。 – Somename

+0

你確定你運行正確的代碼? {name:1}意味着放這個名字。如果你想返回的名稱和所有的工作,你可以做的查詢,而第二部分,比如'db.collection.find({工作:{$中:「1」,「2」]}})'或添加作業到投影'db.collection.find({...},{名稱:1,作業:1})' –

+0

感謝。我正在製作一個類型。謝謝。我現在可以獲得所有的價值。 – Somename

2

你可以嘗試這樣的事情。

以下查詢將選擇jobs數組的元素值爲"3"且投影name字段的所有行。

db.collection.find({jobs:"3"},{name:1}) 

這裏更多https://docs.mongodb.com/manual/reference/operator/query/eq/#array-element-equals-a-value

+0

這工作。但是如果我想找到2個名字呢?我嘗試過'{jobs:「2」||工作:「9」}'。謝謝。另外,如果我想從該值返回所有內容,不僅僅是「名稱」,我該怎麼做? MySQ相當於'SELECT *' – Somename

+1

不客氣。對於第一部分嘗試{$或:[{jobs:「2」},{jobs:「9」}]}。第二部分擺脫{name:1}。 – Veeram