mongodb - 聚合 - MongoDB:按 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,并且每个id对于具有不同值的不同coly可以是相同的,并且对于同一个'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
}
]
}
推荐阅读
- java - 如何在屏幕中心创建一个透明的弯曲透明矩形?
- go - 尽管我使用的是界面,但如何解决导入周期不允许的问题?
- c# - UnitOfWork 与存储库和实体框架
- laravel - Laravel 为急切的加载关系获取排序结果
- elasticsearch - elasticsearch加权随机分布
- java - Java - 复制从数据库中检索到的列表的一部分
- python - 使用 NumPy 数组到 tf.data.Dataset
- javascript - React Native 模态样式
- android - 发生了什么 jar(库)编译版本与应用程序编译版本不同?
- django - 在 Jinja2 模板中使用日期过滤器会引发 TemplateSyntaxError