MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Besoin de sommer à partir de la valeur de l'objet tableau dans mongodb

Il ne fonctionne pas correctement car il agrège tous les documents de la collection ; vous regroupez sur une constante "_id": "tempId" , il vous suffit de référencer la bonne clé en ajoutant le $ comme :

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

qui est essentiellement une version de pipeline à une étape d'une opération d'agrégation avec un champ supplémentaire contenant l'expression de somme avant le pipeline de groupe, puis appelant ce champ en tant que $sum opérateur dans le groupe.

Ce qui précède fonctionne depuis $sum de MongoDB 3.2+ est disponible à la fois dans $project et $group étapes et lorsqu'il est utilisé dans le $project étape, $sum renvoie la somme de la liste d'expressions. L'expression "$messages.data.value" renvoie une liste de nombres [120, 1200] qui sont ensuite utilisés comme $sum expression :

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