【发布时间】:2017-11-08 23:36:42
【问题描述】:
我正在尝试使用新的 MongoDB v3.4 $graphLookup 聚合管道。我有这个简单的树集合,有一些节点和一个父 DBRef:
{ "_id" : ObjectId("59380657bbdbfb36c18a80f2"), "name" : "Root node 1" },
{ "_id" : ObjectId("5938068abbdbfb36c18a80f5"), "name" : "Child 1.1", "parent" : ObjectId("59380657bbdbfb36c18a80f2") },
{ "_id" : ObjectId("593806b0bbdbfb36c18a80f7"), "name" : "Subchild 1.1.1", "parent" : ObjectId("5938068abbdbfb36c18a80f5") },
{ "_id" : ObjectId("5938068abbdbfb36c18a80f6"), "name" : "Child 1.2", "parent" : ObjectId("59380657bbdbfb36c18a80f2") },
{ "_id" : ObjectId("59380657bbdbfb36c18a80f3"), "name" : "Root node 2" }
我想得到这种树结构:
- Root node 1
- Child 1.1
- Subchild 1.1.1
- Child 1.2
- Root node 2
所以,我正在尝试使用新的 $graphLookup 聚合管道,如下所示:
db.getCollection('tree').aggregate([
{ $match: { parent: { $exists: false } } },
{
$graphLookup: {
from: "tree",
startWith: "$_id",
connectFromField: "_id",
connectToField: "parent",
as: "children"
}
},
{ $sort: { name: 1 } }
])
但我的问题是我在一个集合中获得了“根节点 1”的所有子节点:
{
"_id" : ObjectId("59380657bbdbfb36c18a80f2"),
"name" : "Root node 1",
"children" : [
{ "_id" : ObjectId("593806b0bbdbfb36c18a80f7"), "name" : "Subchild 1.1.1", "parent" : ObjectId("5938068abbdbfb36c18a80f5") },
{ "_id" : ObjectId("5938068abbdbfb36c18a80f6"), "name" : "Child 1.2", "parent" : ObjectId("59380657bbdbfb36c18a80f2") },
{ "_id" : ObjectId("5938068abbdbfb36c18a80f5"), "name" : "Child 1.1", "parent" : ObjectId("59380657bbdbfb36c18a80f2") }
]
},
{
"_id" : ObjectId("59380657bbdbfb36c18a80f3"),
"name" : "Root node 2",
"children" : [ ]
}
我不知道如何在“Child 1.1”的儿童集合中递归查找儿童以获得“Subchild 1.1.1”。 我正在寻找任何建议。谢谢:)
【问题讨论】:
标签: mongodb