首页 > 解决方案 > MongoDB - 查找多个字段不存在于另一个集合中的文档

问题描述

我有 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",
  }
]

对于此示例,它应该返回文档:

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

标签: databasemongodbmongodb-query

解决方案


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

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

操场


推荐阅读