21

我有一个包含字段类型、totalA 和 totalB 的文档的集合

我想使用聚合框架来按类型分组 - 并获得 totalA 和 totalB 的总和。

我尝试的最后一件事(不起作用)是:

'$group' : { 
  '_id' : '$type', 
  'totalA' : { '$sum' : '$totalA' },
  'totalB' : { '$sum' : '$totalB' },
  'totalSum' : { '$sum' : '$totalA', '$sum' : '$totalB' },
}  }

totalSum 仅具有一个字段的总和,而不是组合值。

4

3 回答 3

53

我找到了一个解决方案:

只需使用 $project 在输出中将两个字段 $add 一起。

{ "$project" : {
      'totalA' : '$totalA',
      'totalB' : '$totalB',
      'totalSum' : { '$add' : [ '$totalA', '$totalB' ] },
     }
于 2013-05-21T18:02:09.960 回答
29

你可以$sum这样使用:

{
    $group : {
        _id: null,
        amount: { $sum: { $add : [ 
            '$NumberOfItemsShipped', '$NumberOfItemsUnshipped' 
        ]}},
    }
},
于 2018-02-17T10:16:25.047 回答
14

除了此处的答案之外,当某些文档中不存在键时,添加$add错误值的问题。

例如,如果Col3&Col4键有时是not present/ undefined,那么下面$ifNull会有所帮助:

{
 $group : {
  _id: {
     "Col1": "$Col1",
     "Col2": "$Col2"
    },
  sum_of_all_days_in_year: {
    $sum: {
      "$add": [
        { "$ifNull": ["$Col3", 0] },
        { "$ifNull": ["$Col4", 0] }
       ]
     }
  },
 }
}
于 2018-08-21T06:55:40.310 回答