Sử dụng $facet
giai đoạn đường ống để xử lý nhiều đường ống tổng hợp trong một giai đoạn duy nhất trên cùng một bộ tài liệu đầu vào. Trong trường hợp của bạn, bạn cần tổng hợp các số lượng riêng biệt, sau đó kết hợp hai kết quả và tính tổng cuối cùng.
Điều này có thể được chứng minh bằng cách chạy đường dẫn sau:
db.collection.aggregate([
{ "$match": { "userid": "123" } },
{
"$facet": {
"groupByPage": [
{ "$unwind": "$page" },
{
"$group": {
"_id": "$page",
"count": { "$sum": 1 }
}
}
],
"groupByNewPage": [
{ "$unwind": "$newpage" },
{
"$group": {
"_id": "$newpage",
"count": { "$sum": 1 }
}
}
]
}
},
{
"$project": {
"pages": {
"$concatArrays": ["$groupByPage", "$groupByNewPage"]
}
}
},
{ "$unwind": "$pages" },
{
"$group": {
"_id": "$pages._id",
"count": { "$sum": "$pages.count" }
}
},
{ "$sort": { "count": -1 } }
], function(error, data){
if (error) {
console.log(error);
} else {
console.log(data);
}
)