MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come sommare tutti i campi in un sottodocumento di MongoDB?

Hai commesso il classico errore di avere nomi di campo arbitrari. MongoDB è "senza schema", ma non significa che non devi pensare al tuo schema. I nomi delle chiavi dovrebbero essere descrittivi e, nel tuo caso, ad es. "S2" in realtà non significa nulla. Per eseguire la maggior parte dei tipi di query e operazioni, dovrai riprogettare lo schema per archiviare i tuoi dati in questo modo:

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

Puoi quindi eseguire la tua query come:

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

Che poi si traduce in qualcosa del genere (con l'unico documento dalla tua domanda):

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