Bạn có thể sử dụng truy vấn tổng hợp bên dưới.
$group ban đầu để tính tổng số trong khi $push trường khái niệm thành trường mảng. $$ROOT để truy cập toàn bộ tài liệu.
Giữ lại tổng số bài viết trong $group tiếp theo .
Phần còn lại tất cả vẫn theo cách của bạn.
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 cũng là một tùy chọn trong đó bạn có thể hai truy vấn trong hai đường ống riêng biệt, sau đó hợp nhất để tiếp tục với phần còn lại của các giai đoạn.