Почему эти суммы MongoDB не складываются? - PullRequest
0 голосов
/ 10 сентября 2018

Допустим, у меня есть 2 документа:

{ 
    "_id" : "8tvgUTKt2U", 
    "answers" : [
        [
            NumberInt(-1)
        ]
    ]
},
{ 
    "_id" : "BDTESUEIlm", 
    "answers" : [
        [
            NumberInt(1)
        ], 
        [
            NumberInt(-1)
        ]
    ]
}

Я хотел бы суммировать значения элементов массива.Но когда я $ раскручиваю 'ответы' и $ суммирую их в конвейере $ group, я получаю это:

{ 
    "_id" : "BDTESUEIlm", 
    "answerTotal" : NumberInt(0)
}
{ 
    "_id" : "8tvgUTKt2U", 
    "answerTotal" : NumberInt(0)
}

Что я делаю не так?

1 Ответ

0 голосов
/ 11 сентября 2018

Это потому, что когда вы $unwind двухмерный массив, как только вы получите только массив и $sum дает правильные результаты при применении к числовым значениям в $group ступени конвейера, в противном случае по умолчанию будет 0, если все операнды не числовые.

Чтобы исправить это, вы можете использовать $sum в $project конвейере без необходимости $unwind как $sum перемещается в массив для работы с числовыми элементами массива, чтобы вернуть одно значение, если выражение разрешается в массив.

Попробуйте получить следующий конвейер, чтобы получить правильные результаты:

db.collection.aggregate([
    { '$project': {
        'answerTotal': {
            '$sum': {
                '$map': {
                    'input': '$answers',
                    'as': 'ans',
                    'in': { '$sum': '$$ans' }
                } 
            }
        }
    } }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...