我需要写一个mongoDB查询,给定一个集合:“nodes”,它就像层次结构,每个文档都会有一个“_id”,“name”,“kind”,“_parentNode”,你需要找到所有每个文档的子级文档,顶级文档不会有属性“_parentNode”,但会有一个“organizationId”。
步骤:需要找到kind=“Site”的所有_id,然后找到“Site”的每个_id名为“siteId”的所有孩子,然后找到每个“siteId”的孩子是什么,递归找到“siteId”的孩子的孩子...
最后我想要这样的东西:
[
{"id":"123","name":"a","kind":"A","children":[childsId1,childsId2,...,childsIdn]},
{"id":"124","name":"abc","kind":"B","children":[children's ids,....]},
...
]
我当前使用的代码:
db.nodes.aggregate([
{
$match: { kind: "Site" },
},
{
$graphLookup: {
from: "nodes",
startWith: "$_id",
connectFromField: "_id",
connectToField: "_parentNode",
as: "children",
},
},
{
$project: {
_id: 1,
name: 1,
kind: 1,
children: "$children._id",
},
},
]);
只给我一层关系。像这样
[
{
"_id": {
"$oid": "56675f4546e0324b4566f6eb"
},
"kind": "Site",
"name": "Xman",
"children": [
{
"$oid": "577ed981e86ff29f5d950005"
},
{
"$oid": "577ed981e86ff29f5d950003"
},{xx}.......
]
},........{},...]
您可以看到所有结果都是第一层“站点”。但我需要的是继续从那些孩子身上找到身份、姓名、种类。直到我们到达底部...
MongoDB内部真正的关系是“site”-->“A”-->“B”(可能没有这个)-->“C”-->也许更多。我只想从我们的 MongoDB 数据库创建一个多根树状结构。那可能吗?如何编写这样的查询???