次の集計でそれを行うことができます:
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
}
}
]
);
最初に、parentId値に応じて_idまたはparentIdで埋められる追加のフィールド「group_id」を投影します。group_idフィールドは、グループ化して合計数を作成するために使用されます。最後のステップは、total_countでグループ化することです。
mongoDb 3.4を使用している場合は、$graphLookup を確認できます。 しかし今のところ、3.4より前の集計を残しておきます;-)