2017-06-15 43 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