当前位置: 首页 > 知识库问答 >
问题:

如何构建聚合管道,根据其他文档中的字段值过滤文档?

蓬野
2023-03-14

如果文档集合包含:

{ _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" }

文档1在聚合中被删除,因为文档3具有对它的引用。

如何在聚合管道中实现这一点?

共有1个答案

澹台季萌
2023-03-14

试试这个:

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

MongoPlayground |$graphLookup

 类似资料:
  • 考虑以下Firestore结构: 收藏 现在,我想查询宠物满足某些条件的人。例如,拥有两只以上宠物的人,或者拥有一只名为“ABC”的宠物的人。 这可能吗?

  • 给定具有以下文档结构的MongoDB集合: 其中每个文档包含一个子文档数组,我希望将集合转换为以下结构的文档: 其中每个子文档现在是主文档中以子文档中的一个值命名的新字段的值(在该示例中,< code>animal字段的值用于创建新字段的名称,即< code>cat和< code>dog)。 我知道如何使用爪哇脚本片段进行。它很慢。我的问题是:如何使用聚合管道完成此操作?

  • 这是我到目前为止所尝试的: 但这将返回所有三个子文档,包括空的一个子文档。我怎样才能仅仅获得第一个和第三个子文档(根据我的示例),以便我可以将它们传递到管道上的下一步?

  • ES如何在内部实现度量聚合? 假设索引中的文档具有以下结构: 对于以下对类别进行术语聚合并计算总和(度量)的查询,“度量”字段值 从文档中提取(即\u源)并求和或 查询:

  • 我在尝试使用MongooseJs在Mongodb中按嵌套数组排序时遇到了一个小问题。 a)一个产品包含任务,每个任务都有子任务。 b)任务有顺序 这是一个示例产品文档: 结果: } 我正在使用MongoDB聚合管道来订购任务 结果: } 预期结果: 我真的很接近了,所有的排序似乎都在工作。我只需要一些帮助来将子任务放回父母体内。非常感谢任何帮助。 谢谢

  • 我试图使用MongoDb列出展开嵌套数组。 一个产品包含任务,每个任务可以有零个、一个或多个子任务。 以下是产品文档示例: 结果: 聚合管道在对任务进行排序方面起到了很大的作用 有时任务没有子任务,例如: 当他们没有孩子的时候,还有什么可以帮助他们完成任务吗? 当前聚合: 期望的结果: