是否可以使用聚合框架将MongoDB中的2个字段相加?

时间:2013-05-21 17:38:08

标签: mongodb pymongo aggregation-framework

我有一个包含字段类型,totalA和totalB

的文档的集合

我想使用聚合框架按类型分组 - 并将totalA和totalB的总和加在一起。

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

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

totalSum只有一个字段而不是合并值的总和。

3 个答案:

答案 0 :(得分:30)

我找到了解决方案:

只需使用$ project将$两个字段添加到输出中。

{ "$project" : {
      'totalA' : '$totalA',
      'totalB' : '$totalB',
      'totalSum' : { '$add' : [ '$totalA', '$totalB' ] },
     }

答案 1 :(得分:4)

您可以这样使用$ sum:

{
            $group : {
                _id: null,
                amount: { $sum: { $add : [ '$NumberOfItemsShipped', '$NumberOfItemsUnshipped' ] }},
            }
        },

答案 2 :(得分:3)

除了此处的answer之外,当某些文档中没有键时,$add还会提供错误的值。

例如,如果Col3Col4键有时是not present/ undefined,那么在$ifNull下面将有帮助:

{
 $group : {
  _id: {
     "Col1": "$Col1",
     "Col2": "$Col2"
    },
  sum_of_all_days_in_year: {
    $sum: {
      "$add": [
        { "$ifNull": ["$Col3", 0] },
        { "$ifNull": ["$Col4", 0] }
       ]
     }
  },
 }
}