sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo sumar todos los campos en un subdocumento de MongoDB?

Ha cometido el clásico error de tener nombres de campo arbitrarios. MongoDB está "libre de esquemas", pero eso no significa que no necesite pensar en su esquema. Los nombres de las claves deben ser descriptivos y, en su caso, p.e. "S2" en realidad no significa nada. Para realizar la mayoría de los tipos de consultas y operaciones, deberá rediseñar su esquema para almacenar sus datos de esta manera:

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

A continuación, puede ejecutar su consulta como:

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

Lo que luego resulta en algo como esto (con el único documento de su pregunta):

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