Verwenden Sie $facet
Pipeline-Stage verwenden, um mehrere Aggregationspipelines innerhalb einer einzigen Stufe für denselben Satz von Eingabedokumenten zu verarbeiten. In Ihrem Fall müssen Sie die Zählungen separat aggregieren, dann die beiden Ergebnisse zusammenführen und die endgültigen Aggregate berechnen.
Dies kann durch Ausführen der folgenden Pipeline demonstriert werden:
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);
}
)