以下の集計クエリを使用できます。
最初の$group
$push
の間に合計数を計算します 概念フィールドを配列フィールドに。 $$ROOT
ドキュメント全体にアクセスするには
次の$group
で記事の総数を保持します 。
残りはすべてあなたがしたようにとどまります。
db.articles.aggregate([
{"$group":{
"_id":null,
"totalArticles":{"$sum":1},
"concepts":{"$push":"$$ROOT.concepts"}
}},
{"$unwind":"$concepts"},
{"$group":{
"_id":"$concepts.text",
"totalArticles":{"$first":"$totalArticles"},
"count":{"$sum":1},
"average":{"$avg":"$concepts.relevance"}
}},
{"$project":{
"count": "$count",
"percent": {
"$divide": [ "$count", "$totalArticles" ]
}
}
},
{"$sort": {"count": -1}}
])
$facets
また、2つの別々のパイプラインで2つのクエリを実行した後、マージして残りのステージを続行できるオプションです。