MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Summierung von zwei Spalten in der Aggregatmethode

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);
    }
)