Mar*_*zas 10 sum mongodb aggregation-framework
我试图在一系列文档中总结一些值,没有运气.
这是文件
db.Cuentas.find().漂亮的()
{
"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(....)
}
Run Code Online (Sandbox Code Playgroud)
因此,我需要"Eguos"中所有"Monto"的总和为"Usuario":"MarioCares".在这个例子154000
使用聚合我使用:
db.Cuentas.aggregate(
[
{ $match: {"Usuario": "MarioCares"} },
{ $group:
{
_id: null,
"suma": { $sum: "$Egresos.Monto" }
}
}
]
)
Run Code Online (Sandbox Code Playgroud)
但我总是得到
{ "result" : [{ "_id" : null, "suma" : 0 }], "ok" : 1 }
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么 ?
Joh*_*yHK 19
正如Sammaye指出的那样,你需要$unwind在Egresos数组中复制匹配的doc每个数组元素,这样你就可以$sum覆盖每个元素:
db.Cuentas.aggregate([
{$match: {"Usuario": "MarioCares"} },
{$unwind: '$Egresos'},
{$group: {
_id: null,
"suma": {$sum: "$Egresos.Monto" }
}}
])
Run Code Online (Sandbox Code Playgroud)
你也可以这样做.不需要分组只是投影你的字段.
db.Cuentas.aggregate([
{ $match: { "Usuario": "MarioCares" } },
{
$project: {
'MontoSum': { $sum: "$Egresos.Monto" }
}
}
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14235 次 |
| 最近记录: |