mongodb - 在 mongodb 中对子文档进行分组和聚合
问题描述
OBS!菜鸟问题可能:)
给定以下数据,如何查询并返回每个索引的摘要?
[
{
"title": "test",
"indexes":[
{ "id":1, "value": 0.5764860139860139860139860140 },
{ "id":2, "value": 0.3083479020979020979020979020 },
{ "id":3, "value": 0.1151660839160839160839160838 }
]
},
{
"title": "test",
"indexes":[
{ "id":1, "value": 0.5764860139860139860139860140 },
{ "id":2, "value": 0.3083479020979020979020979020 },
{ "id":3, "value": 0.1151660839160839160839160838 }
]
},
{
"title": "test",
"indexes":[
{ "id":1, "value": 0.5764860139860139860139860140 },
{ "id":2, "value": 0.3083479020979020979020979020 },
{ "id":3, "value": 0.1151660839160839160839160838 }
]
},
{
"title": "test",
"indexes":[
{ "id":1, "value": 0.5764860139860139860139860140 },
{ "id":2, "value": 0.3083479020979020979020979020 },
{ "id":3, "value": 0.1151660839160839160839160838 }
]
}
]
即我想产生这样的东西:
index.id:1, total: 2.305...
index.id:2, total: 1.233...
etc
解决方案
db.collection.aggregate([
{
"$unwind": "$indexes"
},
{
$group: {
_id: "$indexes.id",
total: {
$sum: "$indexes.value"
}
}
}
])
试试这个查询
你会得到这样的
[
{
"_id": 2,
"total": 1.2333916083916083
},
{
"_id": 1,
"total": 2.305944055944056
},
{
"_id": 3,
"total": 0.4606643356643357
}
]
推荐阅读
- reactjs - 如何向用户发送警报而不将他/她发送到反应导航中的另一个页面?
- elasticsearch - 弹性搜索,从头开始无法正常工作
- android - 为同一设备获取不同的 ID。为什么?
- spring-data-jpa - Spring data mongodb 不适用于 spring webmvc 应用程序中的 spring data jpa
- .net - 查询未在 .net 中执行
- java - 当 CompleteableFuture 抛出异常时返回 500 内部错误
- c++ - 如何通过变量值获得最小值组?
- php - Wordpress:无法使用 get_the_id() 获取文章标签中的 URL;
- layout - Asp.Net Core 2 发布后出现错误“找不到布局”
- java - 使用非对称杰克逊编码/解码 Yaml