Sie können die folgende Aggregationsabfrage verwenden.
Anfängliche $group
um die Gesamtzahl zu berechnen, während $push
das Concepts-Feld in ein Array-Feld. $$ROOT
um auf das gesamte Dokument zuzugreifen.
Behalten Sie die Gesamtzahl der Artikel in der nächsten $group
bei .
Alles bleibt so, wie du es getan hast.
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
ist auch eine Option, bei der Sie zwei Abfragen in zwei separaten Pipelines ausführen können, gefolgt von einer Zusammenführung, um mit den restlichen Phasen fortzufahren.