对 MongoDB 中的集合进行递归计数

Ale*_*der 2 tree recursion mongodb aggregation-framework

我在 MongoDB 中有一个具有树结构的文档列表。我想要一个聚合查询,它返回给定_id属性的所有嵌套子项的计数。

结构:

{
  '_id': '1',
  'parentId': null,
},
{
  '_id': '2',
  'parentId': '1',
},
{
  '_id': '3',
  'parentId': '1',
},
{
  '_id': '4',
  'parentId': '3',
}
Run Code Online (Sandbox Code Playgroud)

聚合结果:(给出_id='1':)

{
  total_children: 3
}
Run Code Online (Sandbox Code Playgroud)

我知道这可能需要一个阶段,这个问题与 MongoDB 中集合的递归搜索$graphLookup非常相似,但在某种意义上是向后的。

use*_*814 5

您可以使用下面的聚合查询。

递归查找以找到给定 _id 的所有子级,然后$size对子级进行计数。

db.col.aggregate([
  {"$match":{"_id":"1"}},
  {"$graphLookup":{
    "from":col,
    "startWith":"$_id",
    "connectFromField":"_id",
    "connectToField":"parentId",
    "as":"children"
  }},
  {"$project":{"total_children":{"$size":"$children"}}}
])
Run Code Online (Sandbox Code Playgroud)