Сумма полей документа mongodb - PullRequest
0 голосов
/ 05 июня 2019

Мне нужно найти сумму некоторых указанных полей, используя следующую логику: Найти документ where sum of (score_one.1+ score_one.2 + score_one.3 + score_one.4 + score_one.5) <= 6.

Структура документа выглядит следующим образом:

{
    _id: ObjectId("5ce12e56937edb2b008631ec"),
    date: "2011-8-3",
    league: "American League",
    team_names: "Texas at Detroit",
    team_one: "TEX",
    score_one: {
        1: 0,
        2: 0,
        3: 0,
        4: 2,
        5: 1,
        6: 0,
        7: 0,
        8: 0,
        9: 1,
        T: "TEXT",
        R: 4,
        ML: -115,
        O/U: "",
        H: 10,
        E: 1
    },
    team_two: "DET",
    score_two: {
        ...
    }
}

Как мне выполнить этот запрос в MongoDB?

Ответы [ 3 ]

1 голос
/ 05 июня 2019

Используйте $ add на стадии проекта $ агрегации.

db.test.aggregate({ $match: {...your filter here... } },
     { $project : {
             'league' : '$league',
             'total' : {'$add' : [ '$score_one.1', '$score_one.2',... ]}
         }})

MongoPlayground

1 голос
/ 05 июня 2019

Если вы работаете с очень конкретным набором полей, вы можете использовать оператор $sum для этих конкретных полей.Этап $addFields добавляет любое количество новых полей ко всем документам в конвейере в соответствии с результатами некоторого выражения.В этом случае мы выполняем сумму для указанных полей с префиксом $ для обозначения существующих полей документа и сохраняем результат в новом поле field_total.Затем мы выполняем $match с измененными документами, чтобы получить только те документы, которые имеют field_total с максимальным значением 6 с помощью оператора $lte (меньше или равно).Конечный конвейер выглядит примерно так:

db.collection.aggregate([
    {$addFields: {
        field_total: {$sum: [
            "$score_one.1",
            "$score_one.2",
            "$score_one.3",
            "$score_one.4",
            "$score_one.5"
        ]}
    }},
    {$match: {
        field_total: {$lte: 6}
    }}
]);
0 голосов
/ 06 июня 2019

Вы можете найти решение по этой ссылке. Эта ссылка ответ поможет вам, как агрегировать и получить сумму из определенного массива.

...