如何只获取不包含在另一条记录数组中的记录

How to get only the records which are not contained in the array of another record

我正在尝试从 MongoDB 中检索所有未在另一个文档的数组字段中引用的记录。我有以下格式的数据:

[
  { "domain": "foo.com", "altNames": [] },
  { "domain": "bar.com", "altNames": [] },
  { "domain": "zaz.com", "altNames": ["foo.com", "bar.com"]},
  { "domain": "baz.com", "altNames": ["boo.com"]}
]

我想从这些数据中检索域为 zaz.combaz.com 的记录,因为它们的 domain 不在另一个记录 altNames 数组中。

进行自查,检查结果数组是否为空

db.collection.aggregate([
  {
    "$lookup": {
      "from": "collection",
      let: {
        d: "$domain"
      },
      pipeline: [
        {
          "$match": {
            $expr: {
              $in: [
                "$$d",
                "$altNames"
              ]
            }
          }
        },
        {
          $limit: 1
        }
      ],
      "as": "altNamesLookup"
    }
  },
  {
    "$match": {
      altNamesLookup: []
    }
  },
  {
    "$project": {
      altNamesLookup: false
    }
  }
])

这里是Mongo playground供您参考。