聚合-MongoDB:按ID求和不同的值

时间:2018-08-28 15:58:28

标签: mongodb aggregation-framework

我对集合执行汇总,但结果与预期不符:

bind()

集合'test'包含字段coly,id,val和每个id对于具有不同值的不同coly可以相同,并且一个id对于相同的“ coly”可以存在一次以上

聚合的目的是通过按字段'coly'<分组的“ id” 获得值的总和('val') / strong>。

mongo版本是3.4。

有什么帮助吗?

结果是:

bind

预期结果:

db.getCollection('test').aggregate(
                          [
                           {$match: { "colx" : 8323, "id" : {$in:    [802, 801, 803, 805, 810, 806, 807, 808, 809, 816]}}},
                           {$group : {_id : { coly : "$coly" , id : "$id" } ,  total: {$sum: "$val"} } },
                         ])

1 个答案:

答案 0 :(得分:0)

你的话太含糊了。

根据您的预期结果,我认为您的查询是按coly分组,然后按id分组并计算每个组的总数:

db.test.aggregate([
   {$match: { "colx" : 8323, "id" : {$in: [802, ....]}}},
   {$group: {_id : { coly : "$coly" , id : "$id" } ,  total: {$sum: "$val"} } },
   {$group: {_id: '$_id.coly', items: {$push: {id: '$_id.id', total: '$total'}} } }
])

这将输出:

{
"_id": 898,
"items": [
   {
    "id" : 801
    "total" : 3355560
   },
   {
    "id" : 805
    "total" : 2760139
   }
]
}