У меня есть такие документы:
{
valuesPerDay: [
{ date: '2019-10-01 00:00:00.000Z', value: 1 },
{ date: '2019-10-02 00:00:00.000Z', value: 2 },
{ date: '2019-10-03 00:00:00.000Z', value: 2 },
// ... here could be from 30 to 4000 items
]
}
Мне нужно суммировать значения в указанном c диапазоне дат. Какой подход здесь будет более быстрым?
Используйте {$ unwind: '$ valuesPerDay'}, а затем {$ match: {date: {$ gt: 'x', $ lt: 'y'}}} и $ group, чтобы получить сумму значений
или
Используйте $ filter внутри $ projection следующим образом:
{
$project: {
$filter: {
input: '$valuesPerDay',
as: 'valuePerDay',
cond: {
$and: [
{ $gte: ['$$valuePerDay.date', 'x-date'] },
{$lte: ['$$valuePerDay.date', 'y-date'] },
],
},
}
}
, затем {$ unwind: '$ valuePerDay'} и $ group, чтобы получить сумму значений