【问题标题】:How to construct an aggregation pipeline to filter documents based on field values in other documents?如何构建聚合管道以根据其他文档中的字段值过滤文档?
【发布时间】:2020-10-03 13:24:57
【问题描述】:

如果文档集合包含:

{ _id: "1", name : "doc1", myDocRefId : "" }
{ _id: "2", name : "doc2", myDocRefId : "" }
{ _id: "3", name : "doc3", myDocRefId : "1" } 

我想构造一个聚合,只返回文档没有被任何其他文档通过 myDocRefId 字段引用。对于这个集合,我想返回:

{ _id: "2", name : "doc2", myDocRefId : "" }
{ _id: "3", name : "doc3", myDocRefId : "1" }

Doc 1 在聚合中被删除,因为 doc 3 有对它的引用。

如何在聚合管道中做到这一点?

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    试试这个:

    db.collection.aggregate([
      {
        $lookup: {
          from: "collection",
          localField: "_id",
          foreignField: "myDocRefId",
          as: "tmp"
        }
      },
      {
        $match: {
          tmp: {
            $size: 0
          }
        }
      },
      {
        $unset: "tmp"
      }
    ])
    

    MongoPlayground | $graphLookup

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 2016-06-26
      • 2021-10-08
      相关资源
      最近更新 更多