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

Muss aus dem Array-Objektwert in Mongodb summiert werden

Es funktioniert nicht richtig, weil es alle Dokumente in der Sammlung aggregiert; Sie gruppieren nach einer Konstanten "_id":"tempId" , müssen Sie nur auf den richtigen Schlüssel verweisen, indem Sie $ hinzufügen als:

db.getCollection('myCollection').aggregate([
    { "$group": {
        "_id": "$tempId",
        "totalValue": { 
            "$sum": { "$sum": "$messages.data.value" } 
        }
    } }
])

Dies ist im Wesentlichen eine einstufige Pipeline-Version einer Aggregatoperation mit einem zusätzlichen Feld, das den Summenausdruck vor der Gruppenpipeline enthält und dieses Feld dann als $sum Operator in der Gruppe.

Das obige funktioniert seit $sum von MongoDB 3.2+ ist sowohl in verfügbar $projekt und $group Stufen und bei Verwendung im $Projekt Stufe, $sum gibt die Summe der Liste der Ausdrücke zurück. Der Ausdruck "$messages.data.value" gibt eine Liste von Zahlen [120, 1200] zurück die dann als $sum Ausdruck:

db.getCollection('myCollection').aggregate([
    { "$project": {
        "values": { "$sum": "$messages.data.value" },
        "tempId": 1,
    } },
    { "$group": {
        "_id": "$tempId",
        "totalValue": { "$sum": "$values" }
    } }
])