Vous pouvez utiliser la requête d'agrégation ci-dessous.
$group
initial pour calculer le nombre total pendant que $push
le champ concepts dans le champ tableau. $$ROOT
pour accéder à l'intégralité de la doc.
Conserver le nombre total d'articles dans le prochain $group
.
Reste tout reste comme tu l'as fait.
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
est également une option où vous pouvez deux requêtes dans deux pipelines distincts suivis d'une fusion pour continuer avec le reste des étapes.