Bạn có thể làm điều đó với tổng hợp sau:
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
}
}
]
);
Đầu tiên, tôi chiếu một trường bổ sung "group_id" được điền bằng _id hoặc parentId tùy thuộc vào giá trị parentId. Trường group_id được sử dụng để nhóm và tính tổng. Bước cuối cùng là nhóm trên total_count.
Khi bạn đang sử dụng mongoDb 3.4, bạn có thể xem $ graphLookup nhưng bây giờ tôi để lại cho bạn tổng hợp trước 3,4;-)