mongodb - 将常规 MongoDB 查询运算符与 $or 运算符相结合

标签 mongodb mongodb-query

我尝试将常规 MongoDB 查询运算符与 $or 运算符结合起来,但得到了意外的结果。

假设我有这些记录:

[
  {
    "foo": "foo",
    "bar": "bar",
    "baz": null
  },
  {
    "foo": "foo",
    "bar": "rab",
    "baz": "zab"
  }
]

如您所见,它们共享 foo 值,但在 barbaz 值上有所不同。

如果我运行此查询:

{
  "foo": "foo",
  "$or": [
    {
      "bar": "bar",
      "baz": "baz"
    }
  ]
}

我没有得到任何结果。有什么想法吗?我希望它与我的第一个文档相匹配。

但是,如果我运行此查询,该查询仅包含 $or block 内的单个表达式:

{
  "foo": "foo",
  "$or": [
    {
      "bar": "bar"
    }
  ]
}

我确实在第一个文档上得到了匹配。来自 the docs据说 $or 运算符需要两个或多个表达式。这意味着它可能只是将单个表达式作为普通表达式来评估 $or 查询。

最佳答案

您遇到的问题是因为您在 $or 中使用表达式的方式,您给了他一个 expression object并期望他对该表达式执行 or 逻辑,这不是它的工作原理。

你想做的就是给他多个表情,就像这样:

{
    "foo": "foo",
    "$or": [
        {
            "bar": "bar",
        },
        {
            "baz": "baz"
        }
    ]
}

关于mongodb - 将常规 MongoDB 查询运算符与 $or 运算符相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70142383/

相关文章:

java - 有什么方法可以使用 mongoDB morphia 从 java 更新/替换 mongoDB 的整个文档?

c# - MongoDB:具有重写 ID 和属性的子类出现问题

javascript - MongoDB 查询以计算存在特定数组索引的文档。索引在 javascript 变量中

mongodb - 按日期间隔分组

c# - 如何计算C# Mongodb强类型驱动程序中单个属性的平均值

mongodb - 尝试使用 scala 从 Spark 向 mongodb 写入 $group 聚合时出现重复键错误

node.js - 使用 NodeJS 的异步函数填充不起作用

mongodb - 获取不同的记录值

mongodb - 如何用前缀字符串替换数组中的所有元素?

MongoDB:删除多个对象内的项目