首页 > 解决方案 > 如何仅获取不包含在另一条记录的数组中的记录

问题描述

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

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

从这些数据中,我想检索具有域的记录,zaz.com并且baz.com由于它们domain不在另一个记录altNames数组中。

标签: mongodbmongoosemongodb-querynosql

解决方案


执行自查并检查结果数组是否为空

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游乐场供您参考。


推荐阅读