Это потому, что когда вы $unwind
двухмерный массив, как только вы получите только массив и $sum
дает правильные результаты при применении к числовым значениям в $group
ступени конвейера, в противном случае по умолчанию будет 0
, если все операнды не числовые.
Чтобы исправить это, вы можете использовать $sum
в $project
конвейере без необходимости $unwind
как $sum
перемещается в массив для работы с числовыми элементами массива, чтобы вернуть одно значение, если выражение разрешается в массив.
Попробуйте получить следующий конвейер, чтобы получить правильные результаты:
db.collection.aggregate([
{ '$project': {
'answerTotal': {
'$sum': {
'$map': {
'input': '$answers',
'as': 'ans',
'in': { '$sum': '$$ans' }
}
}
}
} }
])