2017-06-15 42 views
0

我一直在經歷數組內部的mongodb查詢。我已經得到了他們給我的例子來查詢單個數組。但是如果我有兩個不同的數組並想將它們組合成單個查詢,這將如何工作?例如item1和item2是兩個不同的數組。在兩個不同的數組中查詢mongodb

# example given in mongodb document 
db.inventory.find({ qty: { $in: [ 5, 15 ] } }) 

# example of query of what I am trying achieve query two arrays 
db.inventory.find({ item1: { $in: [ item1_value ] } { item2: { $in: [ item2_value ] } }) 

MongoDB的參考文檔:https://docs.mongodb.com/manual/reference/operator/query/in/

我還要提到的是,我使用MongoDB中得到的命令是什麼樣子的想法,但最終這個命令應該pymongo工作,因爲這個命令會通過pymongo執行。

# correct query example as given by Moshe 
db.inventory.find({ 
     $or: [ 
      { item1: { $in: [ item1_value ] }}, 
      { item2: { $in: [ item2_value ] }} 
     ] 
}); 
+0

你應該注意的是,如果你的'itemX_value'實際上只有單一的價值觀,而不是數組本身,那麼你不需要'$ in'只是爲了搜索一個數組的文檔屬性。所以除非'$ in'的參數需要成爲一個「列表」,那麼你只需要做。 '.find({'$ or':[{'item1:1},{'item2':2}]})'。 (''或'':[{'item1':{'$ in':[1,2]}},{'item2':{'$ in' :[1,2]}}]})'。 MongoDB並不關心「item1」實際上是一個數組本身,因爲它只會搜索它的成員以獲得「單數」提供的值。是的python語法是相同的 –

+0

感謝您的澄清。我會牢記這一點。 – Matt

回答

1

MongoDB的 「OR」 語法:

{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } 

你的情況:

db.inventory.find({ 
     $or: [ 
      { item1: { $in: [ item1_value ] }, 
      { item2: { $in: [ item2_value ] } 
     ] 
}); 
+0

我認爲你是正確的,但是當我將這個作爲查詢運行時,我總是得到......就好像語法沒有完全終止命令一樣。 – Matt

+0

@Matt我的語法錯了,我用'}'混淆了''',它現在應該可以工作。 – Moshe

+0

嗯,這是用mongodb殺死我的。語法有點痛苦。我試過這個似乎也是同樣的問題。看...我認爲{item1:{$ in:[item1_value]}缺少一個括號,因爲最外面的括號只與$ in之前的括號相匹配。我關閉了這個,仍然看到問題。 – Matt