MongoDB 数组中对象的聚合总和

mhe*_*sig 5 mongodb aggregation-framework

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

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


{
   "id": 2,
   "stats": [
     {
       "number": 50,
       "year": 2014
     },
     {
       "number": 75,
       "year": 2015
     }
]
}
Run Code Online (Sandbox Code Playgroud)

期望的输出是:

{
   "stats": [
     {
       "number": 150,
       "year": 2014
     },
     {
       "number": 275,
       "year": 2015
     }
}
Run Code Online (Sandbox Code Playgroud)

我不想对number2014 年和 2015 年的财产进行求和,我想对 2014 年的两个文档进行求和。

Smi*_*ave 8

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}
    } ])
Run Code Online (Sandbox Code Playgroud)