Группа в агрегации, включая нулевые значения в mongodb - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь сгруппировать по месяцам и годам в агрегации и вернуть месяцы, в которых тоже нет данных.

Пример
если период с 01.01.08 по 01.03.08 и мы ищем рейтинг, а рейтинг существует только в феврале, я все еще хочу получить январь и март без рейтинга.

$pipeline = [
      ['$match'=>[
            'rating'     => ['$exists' => true],
            'date' => [
                              '$gte' => $da->getStart(true),
                              '$lte' => $da->getEnd(true)
                            ],
                  ]
      ],
      ['$project' => [
              'year'  => [
                '$cond' =>  [
                    ['$ifNull' => [$date->appendDollarSing(), 0]],
                    ['$year' =>  $date->appendDollarSing()],
                    -1
                ],
              'month' => [
                '$cond' => [
                    ['$ifNull' => [$date->appendDollarSing(), 0]],
                    ['$month' =>  $date->appendDollarSing()],
                    -1
                ],
              'rating'  => ['$sum'  => '$rating'],
          ]
      ],
      ['$group' => [
                  '_id' => ['year' => '$year', 'month' =>'$month'],
                  'rating'  => ['$sum'  => '$rating'],
                  'count'   => ['$sum'  => 1],
                  ]
            ],
    ];

Приведенный выше запрос возвращает месяцы с рейтингом, поскольку я использовал значение true для рейтинга. Однако, даже если я удаляю существующее значение true, он не выбирает месяцы без рейтинга

...