Sommare nel documento annidato MongoDB

Sto cercando di sumre alcuni valori in una serie di documenti, senza fortuna.

Questo è il documento

db.Cuentas.find (). abbastanza ()

{ "Agno": "2013", "Egresos": [ { "Fecha": "28-01-2013", "Monto": 150000, "Detalle": "Pago Nokia Lumia a @josellop" }, { "Fecha": "29-01-2013", "Monto": 4000, "Detalle": "Cine, Pelicula fome" } ], "Ingresos": [], "Mes": "Enero", "Monto": 450000, "Usuario": "MarioCares" "_id": ObjectId(....) } 

Quindi, ho bisogno della sum di tutti i “Monto” in “Egresos” per “Usuario”: “MarioCares” . In questo esempio 154000

Usando l’aggregazione io uso questo:

 db.Cuentas.aggregate( [ { $match: {"Usuario": "MarioCares"} }, { $group: { _id: null, "suma": { $sum: "$Egresos.Monto" } } } ] ) 

Ma ottengo sempre

 { "result" : [{ "_id" : null, "suma" : 0 }], "ok" : 1 } 

Che cosa sto facendo di sbagliato ?

PD già vedere questo e questo

Come indicato da Sammaye, è necessario $unwind Egresos matrice Egresos per duplicare il documento corrispondente per elemento di matrice in modo da poter $sum su ogni elemento:

 db.Cuentas.aggregate([ {$match: {"Usuario": "MarioCares"} }, {$unwind: '$Egresos'}, {$group: { _id: null, "suma": {$sum: "$Egresos.Monto" } }} ]) 

So che è un po ‘tardi ma puoi farlo anche in questo modo. non è necessario raggruppare solo proiettare i campi.

 db.Cuentas.aggregate([ { $match: { "Usuario": "MarioCares" } }, { $poject: { 'MontoSum': { $sum: "$Egresos.Monto" } } } ])