U kunt het doen met de volgende aggregatie:
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
}
}
]
);
Eerst projecteer ik een extra veld "group_id" dat wordt gevuld met de _id of de parentId, afhankelijk van de parentId-waarde. Het group_id-veld wordt gebruikt om te groeperen en een totaaltelling te maken. De laatste stap is om te groeperen op het totaal aantal.
Als u mongoDb 3.4 gebruikt, kunt u $graphLookup bekijken maar voor nu laat ik je achter met de pre 3.4-aggregatie;-)