繁体   English   中英

数组中对象的MongoDB聚合总和

[英]MongoDB Aggregation Sum on Objects in Array

我已经看到很多关于如何对数组中数组中对象的属性求和的答案,但我试图对跨文档的数组中对象的各个属性求和。 例如,给定此文档结构:

{
   "id": 1,
   "stats": [
     {
       "number": 100,
       "year": 2014
     },
     {
       "number": 200,
       "year": 2015
     }
]
},


{
   "id": 2,
   "stats": [
     {
       "number": 50,
       "year": 2014
     },
     {
       "number": 75,
       "year": 2015
     }
]
}

所需的输出是:

{
   "stats": [
     {
       "number": 150,
       "year": 2014
     },
     {
       "number": 275,
       "year": 2015
     }
}

我不想对 2014 年和 2015 年的number属性求和,我想对这两个文档在 2014 年求和。

db.test.aggregate([
   {  $unwind: "$stats" },
   {
        $group: {
            _id:"$stats.year",
            number:{$sum:"$stats.number"}
        }
    },
    { 
        $group: {
          _id: 0,  
          stats:{ $push:  {year:"$_id",number:"$number"}}
        }
    },
    {  
        $project:{stats:1,_id:0}
    } ])

这将为您提供所需的输出

db.getCollection('yourcollection').aggregate([
    { $unwind: "$stats" },
    { 
        $group: {
            _id: "$stats.year",
            number:{$sum:"$stats.number"}
        }
    },
    { 
        $group: {
          _id: null,  
          stats:{ $push:  {year:"$_id",number:"$number"}}
        }
    },
    {  
        $project:{stats:1,_id:0}
    }  
])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM