我在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非常相似,但在某种意义上是倒退的。
发布于 2018-01-24 08:00:43
您可以使用下面的聚合查询。
递归查找来定位给定_id的所有子对象,然后使用$size来计算孩子的数量。
db.col.aggregate([
{"$match":{"_id":"1"}},
{"$graphLookup":{
"from":col,
"startWith":"$_id",
"connectFromField":"_id",
"connectToField":"parentId",
"as":"children"
}},
{"$project":{"total_children":{"$size":"$children"}}}
])https://stackoverflow.com/questions/48412571
复制相似问题