Суммируйте все названные поля в агрегации - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь вычислить сумму всех значений ниже. Я пытался погуглить вопрос по-разному, но не могу найти ответ. Данные выглядят так. Мне не нужны ключи, я просто ищу значения для понедельника

"monday" : {
                "a" : 5,
                "b" : 2,
                "c" : 1,
                "d" : 2,
                "e" : 3,
                "f" : 9,
                "g" : 2,
                "h" : 16,
                "h2" : 8,
                "g" : 2
                }

1 Ответ

3 голосов
/ 03 апреля 2019

Вы можете использовать $ objectToArray для преобразования monday в массив полей k и v, а затем использовать $ redu * для их суммирования:

db.collection.aggregate([
    {
        $project: {
            sum: {
                $reduce: {
                    input: { $objectToArray: "$monday" },
                    initialValue: 0,
                    in: { $add: [ "$$value", "$$this.v" ] }
                }
            }
        }
    }
])

игровая площадка Монго

...