Puoi farlo con la seguente aggregazione:
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
}
}
]
);
Per prima cosa progetto un campo extra "group_id" che viene riempito con _id o parentId a seconda del valore parentId. Il campo group_id viene utilizzato per raggruppare e fare un conteggio totale. L'ultimo passaggio è raggruppare su total_count.
Quando utilizzi mongoDb 3.4 puoi controllare $graphLookup ma per ora vi lascio all'aggregazione pre 3.4;-)