Что быстрее $ unwind + $ match или $ project и $ filter - PullRequest
0 голосов
/ 08 мая 2020

У меня есть такие документы:

{ 
  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, чтобы получить сумму значений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...