我试图在聚合中按月和年分组,并返回没有数据的月份。
示例:
如果时间段是 2018 年 1 月 1 日到 2018 年 1 月 3 日,并且我们搜索评级并且评级仅存在于 2 月,我仍然希望获得没有评级的 1 月和 3 月。
$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 它也不会获取没有评级的月份