Хотелось бы узнать, есть ли разница в производительности между промежуточной ступенью $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'
}
}
}])