Du kan gøre det med følgende sammenlægning:
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
}
}
]
);
Først projekterer jeg et ekstra felt "group_id", som er udfyldt med _id eller parentId afhængigt af parentId værdien. Group_id feltet bruges til at gruppere og lave en total optælling. Sidste trin er at gruppere på total_count.
Når du bruger mongoDb 3.4, kan du tjekke $graphLookup men indtil videre forlader jeg dig med pre 3.4-sammenlægningen;-)