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.