如何在MongoDB中解析对文档的引用

  • 本文关键字:文档 引用 MongoDB mongodb
  • 更新时间 :
  • 英文 :


假设我有一个聚合管道,它返回以下文档集:

[
{ "_id": 0, "refs": [1, 2] }, 
{ "_id": 1, "refs": [2, 3] }
]

如何将聚合管道扩展到

  1. 收集"refs"(即[1, 2, 3](中的一组不同值
  2. 返回_id与该集合中的值匹配的文档(即_id为1、2和3的3个文档(

一个选项是向聚合添加4个步骤:

  1. $group以便收集所有参考
  2. CCD_ 6与CCD_
  3. $lookup以便从refs获取文档
  4. 格式
{$group: {_id: 0, refs: {$push: "$refs"}}},
{$project: {
refs: {$reduce: {
input: "$refs",
initialValue: [],
in: {$setUnion: ["$$value", "$$this"]}
}
}
}
},
{$lookup: {
from: "collection",
localField: "refs",
foreignField: "_id",
as: "docs"
}
},
{$unwind: "$docs"},
{$replaceRoot: {"newRoot": "$docs"}}

看看它是如何在操场上工作的例子

有很多方法可以做到这一点。这是另一种方式。

db.collection.aggregate([
{"$unwind": "$refs"},
{
"$group": {
"_id": null,
"refs": {"$addToSet": "$refs"}
}
},
{
"$lookup": {
"from": "collection",
"localField": "refs",
"foreignField": "_id",
"as": "docs"
}
},
{"$unwind": "$docs"},
{"$replaceWith": "$docs"}
])

在mongoplayground.net上试试。

最新更新