Я пытаюсь сгруппировать по месяцам и годам в агрегации и вернуть месяцы, в которых тоже нет данных.
Пример
если период с 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, он не выбирает месяцы без рейтинга