如何在聚合mongodb查询中使用where / whereDate?
我在laravel和jessenger-mongodb中使用汇总查询按字段分组。
这里的问题是,我需要添加一个条件来获取特定日期(即created_at
)的分组数据。
如果我不使用通行证$date
即$date = null
,则以下代码可以很好地工作:
public static function getUsersByTypeLogin($date = null)
{
$q = self::raw()->aggregate(
[
array(
'$match' => array(
'type' => self::LOGIN,
)
),
array(
'$group' => array(
'_id' => array(
'lat' => '$latitude',
'long' => '$longitude',
'country' => '$country',
'state' => '$state'
),
'count' => array('$sum' => 1)
)
)
]
);
if(true == $date){
$q = $q->whereDate('created_at','=',$date);
}
return $q;
}
但是,如果我通过$date
,则会返回错误,提示:
message: "Call to undefined method MongoDB\Driver\Cursor::whereDate()"
$ date是一个Carbon对象,例如:
Carbon @1549843200 {#791
date: 2019-02-11 00:00:00.0 +00:00
}
在这方面请帮助我。
答案 0 :(得分:1)
尝试一下。
$q = self::raw(function($collection) use($date) {
return $collection->aggregate([
array(
'$match' => array(
'type' => self::LOGIN,
'created_date' => $date,
)
),
array(
'$group' => array(
'_id' => array(
'lat' => '$latitude',
'long' => '$longitude',
'country' => '$country',
'state' => '$state'
),
'count' => array('$sum' => 1)
)
)
]);
});