如何在mongoDB查询中递归查找多层子节点?

问题描述 投票:0回答:0

我需要写一个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 数据库创建一个多根树状结构。那可能吗?如何编写这样的查询???

mongodb mongodb-query aggregation-framework
© www.soinside.com 2019 - 2024. All rights reserved.