递归计数MongoDB中的集合

时间:2018-01-23 23:33:51

标签: mongodb recursion tree aggregation-framework

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

结构:

{
  '_id': '1',
  'parentId': null,
},
{
  '_id': '2',
  'parentId': '1',
},
{
  '_id': '3',
  'parentId': '1',
},
{
  '_id': '4',
  'parentId': '3',
}

汇总结果:(给定:_id='1'

{
  total_children: 3
}

我知道这可能需要一个$graphLookup阶段,这个问题与Recursive search on a collection in MongoDB非常相似,但在某种意义上是倒退。

1 个答案:

答案 0 :(得分:2)

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

递归查找以查找给定_id的所有子项,然后$size计算子项。

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