【问题标题】:How to get only the records which are not contained in the array of another record如何仅获取不包含在另一条记录的数组中的记录
【发布时间】:2021-12-26 11:38:46
【问题描述】:

我正在尝试从 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 数组中。

【问题讨论】:

    标签: mongodb mongoose mongodb-query nosql


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      相关资源
      最近更新 更多