如何使用Laravel中的Jessengers包在mongodb中使用where / whereDate聚合函数?

时间:2019-02-11 07:23:11

标签: mongodb laravel mongodb-query

如何在聚合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
}

在这方面请帮助我。

1 个答案:

答案 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)
            )
        )
    ]);
});