Ответ 1
Я нашел решение:
Просто используя $project to $, добавьте два поля вместе в выходной файл.
{ "$project" : {
'totalA' : '$totalA',
'totalB' : '$totalB',
'totalSum' : { '$add' : [ '$totalA', '$totalB' ] },
}
У меня есть коллекция с документами, которые содержат типы полей, totalA и totalB
Я хочу использовать структуру агрегации для группировки по типу - и получить сумму как totalA, так и totalB вместе.
Последнее, что я пробовал (не работает):
'$group' : {
'_id' : '$type',
'totalA' : { '$sum' : '$totalA' },
'totalB' : { '$sum' : '$totalB' },
'totalSum' : { '$sum' : '$totalA', '$sum' : '$totalB' },
} }
totalSum имеет сумму только одного из полей вместо комбинированного значения.
Я нашел решение:
Просто используя $project to $, добавьте два поля вместе в выходной файл.
{ "$project" : {
'totalA' : '$totalA',
'totalB' : '$totalB',
'totalSum' : { '$add' : [ '$totalA', '$totalB' ] },
}
Вы можете использовать $sum
следующим образом:
{
$group : {
_id: null,
amount: { $sum: { $add : [
'$NumberOfItemsShipped', '$NumberOfItemsUnshipped'
]}},
}
},
В дополнение к этому ответу здесь, добавьте проблему с $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] }
]
}
},
}
}