【问题标题】:MongoDB - Multiple $or operationsMongoDB - 多个 $or 操作
【发布时间】:2011-07-06 05:21:59
【问题描述】:

如何进行多个 $or 操作?到目前为止,我已经尝试了以下方法,但它默默地忽略了第二个 $or。

{
  $or: [{a: 2}, {a: 3}], 
  $or: [{b: 5}, {b: 4}]
}

我认为这是因为我使用了两个相同的键。有没有办法解决这个问题?

【问题讨论】:

    标签: key mongodb


    【解决方案1】:

    Mongo 2.0 添加了 $and 运算符,因此您可以进行如下查询:

    db.things.find({$and: [{$or : [{'a':1},{'b':2}]},{$or : [{'a':2},{'b':3}]}] })
    

    http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24and

    【讨论】:

    【解决方案2】:

    对于sql中的多个like,我们使用$in,对于not,我们使用$nin vc 是我们这里的集合名称。我们发现那些字符串包含 cpu 或 memo。

    db.collection('vc').find({   "name" :   { $in: [ /cpu/, /memo/ ]   }     }
    

    【讨论】:

      【解决方案3】:

      您不能嵌套多个 $or 语句。

      这在此处记录:

      http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or

      除此之外:您的查询确实很有意义。

      如果您尝试查询 a 是否为 2 或 3 而 b 是否为 5 或 4:

      {a : {$in : [2,3]}, b: {$in : [4,5 ]} }

      请不要尝试发明新语法。

      【讨论】:

      • 以上是我的问题的简化版本。我真正想做的是查询 a 在两个值之间和 b 在两个值之间。
      • OP 中的$or 可能不合法,但它们彼此相邻,而不是嵌套。
      • 另外:在 2.0 版中更改:您可以嵌套 $or 操作;但是,这些表达式的优化不如顶级表达式。
      【解决方案4】:

      $and 不会做这项工作,因为如果第一个失败,第二个 $or 将不会验证。

      来自 Mongo 手册页:

      $and 运算符使用短路求值。如果第一个表达式(例如 )的计算结果为 false,MongoDB 将不会计算剩余的表达式。

      嵌套的 $or 应该可以解决问题:

      db.things.find({$or: [{$or : [{'a':1},{'b':2}]},{$or : [{'a':2}, {'b':3}]}] })

      【讨论】:

        猜你喜欢
        • 2017-01-22
        • 2016-10-07
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2016-01-15
        相关资源
        最近更新 更多