【问题标题】:Differences between $or and $in when querying Strings in MongoDB / mongooseMongoDB/mongoose中查询字符串时$or和$in的区别
【发布时间】:2019-12-16 04:25:20
【问题描述】:

在构建 API 时,我需要为键 status 匹配包含 pendingactive 值的文档。

尝试时

args.status = {
  $or: [
    'active',
    'pending'
  ]
}

我收到一个错误:cannot use $or with string

然而,

args.status = {
  $in: [
    'active',
    'pending'
  ]
}

工作得很好。

我希望$or 能在这里工作。有人可以提供有关两者之间差异的上下文以及为什么字符串需要$in

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    $or 对具有两个以上表达式的 ARRAY 执行逻辑或运算,例如{$or:[{name:"a"},{name:"b"}]} 此查询将返回名称为“a”或“b”的记录。

    $in 处理数组并返回包含指定数组中任何字段的文档,例如{name:{$in:['a','b']}} 此查询将返回名称为“a”或“b”的文档。

    理想情况下,两者都做同样的事情,只是语法不同。

    在您的情况下,您必须修改 OR 查询语法并在 ARRAY 中添加条件表达式。

    { $or: [
        {
          "args.status": "active"
        },
        {
          "args.status": "pending"
        }
      ]
    }
    

    【讨论】:

    【解决方案2】:

    那是因为 $or 需要对象数组。定义一些过滤器的对象,其中至少需要匹配一个才能返回结果。对于您的特定场景,$in 是最佳选择。不过,如果您想使用 $or,查询将类似于:

    {
      $or: [
        {'args.status' : {$eq: 'active'}},
        {'args.status' : {$eq: 'pending'}}
      ]
    }
    

    我建议您坚持使用 $in,因为它最适合您的要求。

    $or

    可以查看官方docs了解更多详情

    希望这会有所帮助:)

    【讨论】:

    • 感谢您的回复!这有帮助。
    • 我的荣幸,快乐编码:)
    猜你喜欢
    • 2012-05-21
    • 2016-01-01
    • 2015-04-27
    • 2013-07-07
    • 2016-07-29
    • 1970-01-01
    • 2017-06-15
    • 2017-05-18
    • 2015-08-08
    相关资源
    最近更新 更多