sql >> Database teknologi >  >> NoSQL >> MongoDB

Behov for at summere fra array-objektværdi i mongodb

Det fungerer ikke korrekt, fordi det samler alle dokumenterne i samlingen; du grupperer på en konstant "_id":"tempId" , du skal blot henvise til den korrekte nøgle ved at tilføje $ som:

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

som i det væsentlige er en enkelttrins pipelineversion af en aggregeret operation med et ekstra felt, der indeholder sumudtrykket før gruppepipelinen, der derefter kalder det felt som $sum operatør i gruppen.

Ovenstående fungerer siden $sum fra MongoDB 3.2+ er tilgængelig i både $projekt og $group stadier og når det bruges i $projekt fase, $sum returnerer summen af ​​listen af ​​udtryk. Udtrykket "$messages.data.value" returnerer en liste over tal [120, 1200] som derefter bruges som $sum udtryk:

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


  1. Spring Data - MongoDB indeksering DBRef

  2. Hvad er forskellen på mongoose og mongoJS? Hvilken skal jeg bruge?

  3. Oprettelse af dynamisk skema ved hjælp af mongoose

  4. Sådan får du data fra mongodb mellem at inkludere to dage i mongodb ved hjælp af mongoose