sql >> Databasteknik >  >> NoSQL >> MongoDB

Behöver summera från arrayobjektets värde i mongodb

Det fungerar inte korrekt eftersom det samlar alla dokument i samlingen; du grupperar på en konstant "_id":"tempId" , du behöver bara referera till rätt nyckel genom att lägga till $ som:

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

vilket i huvudsak är en enstegspipelineversion av en aggregerad operation med ett extra fält som innehåller summauttrycket före grupppipelinen som sedan anropar det fältet som $sum operatör i gruppen.

Ovanstående fungerar eftersom $sum från MongoDB 3.2+ är tillgänglig i både $project och $group steg och när de används i $project stadium, $sum returnerar summan av listan med uttryck. Uttrycket "$messages.data.value" returnerar en lista med nummer [120, 1200] som sedan används som $summa uttryck:

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


  1. Uppgradering av äldre mongo-databas efter oavsiktlig mongoversionsuppgradering

  2. Använd MongoEngine och PyMongo tillsammans

  3. MongoDB:uppdatera endast specifika fält

  4. Meteor / MongoDB:infoga heltal istället för sträng på formulärsändning