Как использовать where / whereDate в агрегатных функциях mongodb, используя пакет Jessengers в Laravel? - PullRequest
0 голосов
/ 11 февраля 2019

Как использовать where / whereDate в агрегированном запросе mongodb?

Я использую агрегированный запрос в laravel и jessenger-mongodb для группировки по полям.

Проблемаздесь, мне нужно добавить условие для извлечения сгруппированных данных определенной даты, например created_at.

Следующий код работал отлично, если я не использую pass $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 голосов
/ 11 февраля 2019

Попробуйте это.

$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)
            )
        )
    ]);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...