MongoDB - 查找多个字段不存在于另一个集合中的文档

时间:2021-04-08 16:56:36

标签: database mongodb mongodb-query

我有 MongoDB 数据库,我试图返回那些在另一个集合/数组中没有多个字段的文档。我想要过滤的示例数据:

[
  {
    id: "1",
    version: "1",
    data: "test"
  },
  {
    id: "2",
    version: "3",
    data: "test"
  },
  {
    id: "3",
    version: "2",
    data: "test"
  }
]

我需要将那些出现在这样的数组中:

[
  {
    id: "2",
    version: "2",
  },
  {
    id: "3",
    version: "2",
  }
]

对于这个例子,它应该返回文档:

  • id: 1 - 过滤器数组中根本不存在 id
  • id: 2 - id 存在但“版本”字段不匹配

用例是返回当前版本中未显示的文档。我尝试使用 $nin 但它只支持一组值来过滤单个字段。如果我在 $and 运算符中使用它,它会独立比较它。我还设置了一个简单的游乐场: MongoDB playground

1 个答案:

答案 0 :(得分:2)

您可以使用 $nor 运算符,对一个或多个查询表达式的数组执行逻辑 NOR 运算,并选择数组中所有查询表达式失败的文档。

db.collection.find({
  $nor: [
    {
      id: "2",
      version: "2"
    },
    {
      id: "3",
      version: "2"
    }
  ]
})

Playground