【问题标题】:mongodb query in two different arrays两个不同数组中的mongodb查询
【发布时间】:2017-11-18 07:24:15
【问题描述】:

我一直在通过数组内部的 mongodb 查询。我已经得到了他们为我提供的查询单个数组的示例。但是,如果我有两个不同的数组并想将它们组合成一个查询,这将如何工作?例如 item1 和 item2 是两个不同的数组。

# 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 ] }}
       ]
});

【问题讨论】:

  • 您应该注意,如果您的itemX_value 实际上只是单个值而不是数组本身,那么您不需要$in 来搜索作为数组的文档属性。因此,除非$in 的参数需要是一个“列表”,否则您只需这样做。 .find({ '$or': [ { 'item1: 1 }, {'item2': 2 } ]})$in 如果用于“参数列表”.find({ '$or': [ { 'item1': { '$in': [1,2] } }, { 'item2': { '$in': [1,2] } } ] })。 MongoDB 不关心 'item1' 本身是否实际上是一个数组,因为它只会在其成员中搜索“奇异”提供的值。是的,python 语法是相同的
  • 感谢您的澄清。我会记住这一点。

标签: arrays mongodb pymongo


【解决方案1】:

MongoDB“或”语法:

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

在你的情况下:

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

【讨论】:

  • 我认为你是对的,但是当我将其作为查询运行时,我不断得到......好像语法没有完全终止命令。
  • @Matt 我的语法有误,我把]} 混淆了,现在应该可以了。
  • 嗯,这就是用 mongodb 杀死我的原因。语法有点痛苦。我也试过这个似乎是同样的问题。看到...我认为 { item1: { $in: [ item1_value ] } 缺少括号,因为最外面的括号仅与 $in 之前的括号匹配。我关闭了它,但仍然看到问题。
  • 非常感谢,我会花几天时间弄清楚这个语法。它们是一个小的语法错误,但通过您的示例很容易弄清楚。我将在我的问题示例中使用更新的语法显示您的答案。再次非常感谢。
  • 很高兴,很高兴为您提供帮助。
猜你喜欢
  • 2021-12-30
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多