В промежуточном конвейере, который лучше работает между $ addFields и $ project - PullRequest
0 голосов
/ 27 марта 2019

Хотелось бы узнать, есть ли разница в производительности между промежуточной ступенью $addFields или $project в агрегате mongodb

Предположим, эти данные:

{"_id":"5c9b88648a2b5700118e5a05","values":[5,8,2],"piv":1}
{"_id":"5c9b88658a2b5700118e5a06","values":[9,8,2],"piv":1}
{"_id":"5c9b88658a2b5700118e5a07","values":[1,8,2],"piv":2}
{"_id":"5c9b88658a2b5700118e5a08","values":[5,3,2],"piv":2}

Isсуществует разница в производительности между этими двумя агрегатами (это только пример):

db.test.aggregate([{
    // This is the stage that will change
    $addFields: {
        v: {
            $reduce: {
                input: '$values',
                initialValue: 0,
                in: {
                    $sum: ["$$value", "$$this"]
                }
            }
        }
    }
}, {
    $group: {
        _id: '$piv',
        vals: {
            $sum: '$v'
        }
    }
}])

и

db.test.aggregate([{
    // This is the stage that will change
    $project: {
        piv: 1,
        v: {
            $reduce: {
                input: '$values',
                initialValue: 0,
                in: {
                    $sum: ["$$value", "$$this"]
                }
            }
        }
    }
}, {
    $group: {
        _id: '$piv',
        vals: {
            $sum: '$v'
        }
    }
}])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...