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

У меня возникла проблема с mongo db с codeignitor3 для получения записей с использованием группы по $ group в агрегатной функции по дате как «созданной», но у нас есть формат даты и времени в базе данных USER_DATA mongoDb.когда я запускаю запрос на монго, я получаю сообщение об ошибке «невозможно преобразовать строку типа 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)),

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

Ответы [ 2 ]

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

На данный момент я сделал альтернативный вариант, то есть я создал еще одно поле в имени таблицы "created_date": "2019-01-10", и я сделал группу с помощью "create_date" и она работает нормально.

$date = date('Y-m-d H:i:s',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('created_date' => '$created_date')), 'count' => array('$sum' => 1)),
        )); 

Но я хочукак я задавал вопрос, потому что иногда мы не можем создать новое дополнительное поле только для того, чтобы сделать это, поэтому я пробую вариант, который я задал, и надеюсь, что в будущем я тоже получу это решение.Спасибо, ребята :)

0 голосов
/ 28 декабря 2018

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

var project = {
            "$project":{ 
                "_id": 0,
                "y": {
                    "$year": ISODate("$created").getFullYear() 
                    },
                "m": {
                    "$month": ISODate("$created").getMonth()+1 // months start from 0
                }, 
                "d": {
                    "$dayOfMonth":  ISODate("$created").getDate()
                }
            } 
        },
        group = {   
            "$group": { 
                "_id": { 
                    "year": "$y", 
                    "month": "$m", 
                    "day": "$d"
                },  
                "count" : { "$sum" : "$users" } //Users count
            }
        };
...