1

我试图在聚合中按月和年分组,并返回没有数据的月份。

示例
如果时间段是 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 它也不会获取没有评级的月份

4

0 回答 0