MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como somar todos os campos em um subdocumento do MongoDB?


Você cometeu o erro clássico de ter nomes de campo arbitrários. O MongoDB é "livre de esquema", mas isso não significa que você não precise pensar sobre seu esquema. Os nomes das chaves devem ser descritivos e, no seu caso, por exemplo, "S2" realmente não significa nada. Para fazer a maioria dos tipos de consultas e operações, você precisará reprojetar seu esquema para armazenar seus dados assim:
_id:...
Segment:[
    { field: "S1", value: 1 },
    { field: "S2", value: 5 },
    { field: "Sn", value: 10 },
]

Você pode então executar sua consulta como:
db.collection.aggregate( [
    { $unwind: "$Segment" },
    { $group: {
        _id: '$_id', 
        sum: { $sum: '$Segment.value' } 
    } } 
] );

O que resulta em algo assim (com o único documento da sua pergunta):
{
    "result" : [
        {
            "_id" : ObjectId("51e4772e13573be11ac2ca6f"),
            "sum" : 16
        }
    ],
    "ok" : 1
}