Можно ли суммировать 2 поля в MongoDB с использованием структуры Aggregation?

У меня есть коллекция с документами, которые содержат типы полей, totalA и totalB

Я хочу использовать структуру агрегации для группировки по типу - и получить сумму как totalA, так и totalB вместе.

Последнее, что я пробовал (не работает):

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

totalSum имеет сумму только одного из полей вместо комбинированного значения.

Ответ 1

Я нашел решение:

Просто используя $project to $, добавьте два поля вместе в выходной файл.

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

Ответ 2

Вы можете использовать $sum следующим образом:

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

Ответ 3

В дополнение к этому ответу здесь, добавьте проблему с $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] }
       ]
     }
  },
 }
}