我在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非常相似,但在某种意义上是倒退。
答案 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"}}}
])