MongoDB Group К вопросу получения записей с использованием группировки по $ group в статистической функции на дату - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть проблема с mongo db для получения записей с использованием group by $ group в агрегатной функции по дате как «созданной», но у нас есть формат даты и времени в таблице mongoDb базы данных.
когда я запускаю запрос mongo, яполучая ошибку "невозможно преобразовать строку типа BSON в дату"

$date = date('Y-m-d',strtotime(-1 month));
$users = $this->common_model->aggregate($this->database['USER_DATA'], array(array('$match' => array('created' => array('$gte' => $date))),
        array('$sort' => array('_id.created' => -1)),
        array('$group' => array('_id' => array('year' => array('$year' => '$created'), 'month' => array('$month' => '$created'), 'day' => array('$dayOfMonth' => '$created')), 'count' => array('$sum' => 1))),
        ));

до того, как мы используем

array('$group' => array('_id' => array('created' => '$created')), 'count' => array('$sum' => 1)),

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

1 Ответ

0 голосов
/ 03 января 2019

Вы можете попробовать вот так:

$users = $this->common_model->aggregate($this->database['USER'], array(
            array('$match' => array('created' => array('$gte' => $date))),
            array('$sort' => array('_id.created' => -1)),
            array('$project' => array('_id' => 0, 'y' => array('$year' => ISODate('$created') . getFullYear()), 'm' => array('$month' => ISODate('$created') . getMonth() + 1), 'd' => array('$dayOfMonth' => ISODate('$created') . getDate()))),
            array('$group' => array('_id' => array("year" => '$y', "month" => '$m', "day" => '$d'), 'count' => array('$sum' => 1))),
        ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...