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

Roy*_*nik 13 mongodb pymongo aggregation-framework

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

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

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

'$group' : { 
  '_id' : '$type', 
  'totalA' : { '$sum' : '$totalA' },
  'totalB' : { '$sum' : '$totalB' },
  'totalSum' : { '$sum' : '$totalA', '$sum' : '$totalB' },
}  }
Run Code Online (Sandbox Code Playgroud)

totalSum只有一个字段的总和而不是组合值.

Roy*_*nik 34

我找到了解决方案:

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

{ "$project" : {
      'totalA' : '$totalA',
      'totalB' : '$totalB',
      'totalSum' : { '$add' : [ '$totalA', '$totalB' ] },
     }
Run Code Online (Sandbox Code Playgroud)


小智 8

您可以通过$sum以下方式使用:

{
    $group : {
        _id: null,
        amount: { $sum: { $add : [ 
            '$NumberOfItemsShipped', '$NumberOfItemsUnshipped' 
        ]}},
    }
},
Run Code Online (Sandbox Code Playgroud)


Man*_*ddy 5

除了此处的答案之外$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] }
       ]
     }
  },
 }
}
Run Code Online (Sandbox Code Playgroud)