我有以下文件:
{'_id':'id1','parentId':"",'count':1}
{'_id':'id2','parentId':"",'count':12}
{'_id':'id3','parentId':"",'count':16}
{'_id':'id4','parentId':"id2",'count':3}
{'_id':'id5','parentId':"id2",'count':3}
{'_id':'id6','parentId':"id1",'count':0
{'_id':'id7','parentId':"id1",'count':122}
具有“”字段的parentId表示父节点。如果存在parentId,则表示给定parentId的子节点。我需要一个将按“计数”(降序)排序的查询,但是我只希望它返回parentId的游标。但是,如果子项计数最高,则代表总体最高值,应返回该子项的父项。
对以上数据运行查询的结果应按以下顺序为我提供文档:id1,id3,id2
我考虑过启动聚合管道。对于第一阶段,我可以进行计数。但是我不知道如何获取查询以返回孩子的parentId ...
您可以通过以下聚合来做到这一点:
db.collection.aggregate(
[
{
$project: {
group_id : { $cond : { if: { $ne: [ "$parentId", "" ] }, then: "$parentId", else: "$_id" }},
count :1
}
},
{
$group: {
_id : "$group_id",
total_count : { $sum: "$count" }
}
},
{
$sort: {
total_count : -1
}
}
]
);
首先,我计划一个额外的字段“ group_id”,该字段由_id或parentId填充,具体取决于parentId的值。group_id字段用于分组和总计。最后一步是对total_count进行分组。
当您使用mongoDb 3.4时,您可以签出$ graphLookup,但是现在我留给您3.4之前的版本;-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句