首页 > 解决方案 > 在 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

标签: mongodbmongodb-query

解决方案


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
  }
]

推荐阅读