聚合-MongoDB:按id对不同的值求和
我对集合执行聚合,但结果不是预期的结果:聚合-MongoDB:按id对不同的值求和,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我对集合执行聚合,但结果不是预期的结果: db.getCollection('test').aggregate( [ {$match: { "colx" : 8323, "id" : {$in: [802, 801, 803, 805, 810, 806, 807, 808, 809, 816]}}}, {$group : {_id
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"} } },
])
集合'test'包含字段coly、id、val,对于不同的coly,每个id可以是相同的,具有不同的值,对于相同的“coly”,一个id可以存在多次
聚合的目的是通过按字段'coly'分组的“id”获取值('val')之和
mongo版本是3.4
需要帮忙吗
结果是:
/* 1 */
{
"_id" : {
"coly" : 898,
"id" : 801
},
"total" : 3355560
}
/* 2 */
{
"_id" : {
"coly" : 898,
"id" : 805
},
"total" : 2760139
}
预期结果:
{
"_id": 898,
"results": [{
"id": 801,
"total": 3355560
},
{
"id": 805,
"total": 2760139
}
]
}
你的话模棱两可 根据您的预期结果,我认为您的查询是按
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
}
]
}
您的预期结果不是有效的JSON,请修复该错误并完成更正!谢谢