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

Comment additionner tous les champs d'un sous-document de MongoDB ?

Vous avez fait l'erreur classique d'avoir des noms de champs arbitraires. MongoDB est "sans schéma", mais cela ne signifie pas que vous n'avez pas besoin de penser à votre schéma. Les noms de clé doivent être descriptifs et, dans votre cas, par ex. "S2" ne veut vraiment rien dire. Afin d'effectuer la plupart des types de requêtes et d'opérations, vous devrez reconcevoir votre schéma pour stocker vos données comme ceci :

_id:...
Segment:[
    { field: "S1", value: 1 },
    { field: "S2", value: 5 },
    { field: "Sn", value: 10 },
]

Vous pouvez ensuite exécuter votre requête comme :

db.collection.aggregate( [
    { $unwind: "$Segment" },
    { $group: {
        _id: '$_id', 
        sum: { $sum: '$Segment.value' } 
    } } 
] );

Ce qui donne alors quelque chose comme ça (avec le seul document de votre question) :

{
    "result" : [
        {
            "_id" : ObjectId("51e4772e13573be11ac2ca6f"),
            "sum" : 16
        }
    ],
    "ok" : 1
}