【问题标题】:MongoDB Aggregation Sum on Objects in Array数组中对象的MongoDB聚合和
【发布时间】:2019-04-24 14:53:06
【问题描述】:

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

{
   "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 年相加。

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:
    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}
        } ])
    

    【讨论】:

      【解决方案2】:

      这将为您提供所需的输出

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

      【讨论】:

        猜你喜欢
        • 2021-06-21
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 2017-07-14
        • 2020-07-27
        相关资源
        最近更新 更多