Новая «ошибка тысячелетия» с агрегатным запросом Mon go - PullRequest
0 голосов
/ 09 января 2020

Я использую этот конвейер агрегации около шести месяцев:

[
  {
    $group: {
      _id: { $isoWeek: "$createdAt" },
      count: { $sum: 1 },
      fonte: { $push: "$source" },
      appointments: { $push: "$appointment" }
    }
  },
  {
    $addFields: { week: "$_id" }
  },
  {
    $project: { _id: 0 }
  },
  {
    $limit: 2
  }
]

Теперь он выбирает случайные недели, поскольку прошло два года.

Решение кажется простым, но я не могу обернуть свое Обдумайте это, я уже потратил слишком много времени на это.

Я пробовал несколько группировок, но безрезультатно.

Ожидаемый результат состоит в том, чтобы получить ценность за последние две недели данные (производственная статистика), которые затем обрабатываются в обычном режиме js и отображаются в CRM.

Редактировать

Текущий результат:

[
  {
    count: 13,
    fonte: [
      'casalugano.ch', 'homegate.ch',
      'casalugano.ch', 'homegate.ch',
      'tutti.ch',      'homegate.ch',
      'homegate.ch',   'casalugano.ch',
      'tutti.ch',      'homegate.ch',
      'homegate.ch',   'homegate.ch',
      'homegate.ch'
    ],
    appointments: [],
    week: 1
  },
  {
    count: 5,
    fonte: [
      'casalugano.ch',
      'homegate.ch',
      'tutti.ch',
      'homegate.ch',
      'homegate.ch'
    ],
    appointments: [],
    week: 52
  }
]

Ожидаемым результатом будет получение данных подарок неделя и данных последняя неделя (неделя 2 и 1).

1 Ответ

0 голосов
/ 09 января 2020

Я обработал это следующим образом:

{
                $group: {
                    _id: { $isoWeek: '$createdAt' },
                    count: { $sum: 1 },
                    fonte: { $push: '$fonte' },
                    appointments: { $push: '$appointment' }
                }
            },
            {
                $addFields: { week: '$_id' }
            },
            {
                $project: { _id: 0 }
            },
            /*{
                $limit: 2
            }*/
            {
                $match: { week: { $gte: getWeekNumber(new Date()) - 1, $lte: getWeekNumber(new Date()) } }
            }

getWeekNumber - это просто вспомогательная функция, которая возвращает неделю ISO, а затем я вручную изменяю массив.

Если у кого-то есть чище ответ, добро пожаловать!

...