sql >> Database >  >> NoSQL >> MongoDB

Moet optellen van array-objectwaarde in mongodb

Het werkt niet correct omdat het alle documenten in de collectie aggregeert; je groepeert op een constante "_id": "tempId" , je hoeft alleen maar naar de juiste sleutel te verwijzen door de $ . toe te voegen als:

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

wat in wezen een eentraps pijplijnversie is van een aggregatiebewerking met een extra veld dat de somuitdrukking vóór de groepspijplijn bevat en dat veld vervolgens aanroept als de $sum operator in de groep.

Het bovenstaande werkt sinds $sum van MongoDB 3.2+ is beschikbaar in zowel de $project en $group stadia en wanneer gebruikt in de $project stage, $sum geeft de som van de lijst met uitdrukkingen terug. De uitdrukking "$messages.data.value" geeft een lijst met getallen terug [120, 1200] die vervolgens worden gebruikt als de $sum uitdrukking:

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


  1. Flask is traag om Mongdb . te bevragen

  2. hoe kan ik zoeken naar tekst in een array in mongodb

  3. Lente:kan een klas zowel @Document als @Table zijn?

  4. Splits string in een array van substrings of karakters in MongoDB