MongoDB выбирает данные не старше недели

Итак, я пытаюсь выбрать данные, которые не старше моей недели, мне нужно что-то вроде этого из mysql:

WHERE date <= one week ago

Вот мой текущий запрос:

$this->aggregate(
                array(
                    array('$sort' => array( '_id' => self::SORT_DESC)),
                    array('$match' => array( 'seen' => 0)),
                    array('$group' => array('_id'=>'$target_user',
                        'type' => array('$push'=> array('type' => '$type',
                            'title'=>'$title',
                            'link'=>'$link',
                            'dt'=>'$dt',
                            'own'=>'$own',
                            'usr'=>'$usr'))
                        )),
                    ));

Поле dt в $group представляет собой строковую дату, которая хранится следующим образом: 2013-10-14 14:53:11 поэтому на основе ключа dt мне нужны данные не старше недели.

Можно ли сделать что-то подобное в Mongo?


person user2885793    schedule 16.10.2013    source источник
comment
Можно немного точнее? Мейб напишите полный ответ, спасибо   -  person user2885793    schedule 16.10.2013
comment
В вашей модели php как называется переменная, которая содержит вашу дату? Также это строка или это MongoDate?   -  person Sammaye    schedule 16.10.2013
comment
У меня нет переменной, которая содержит дату, и да, это строка, дата хранится только в БД, ключ, в котором хранится дата, - `dt`, как вы можете видеть в `$group`   -  person user2885793    schedule 16.10.2013
comment
хм, я бы посчитал сохранение его в виде строки действительно плохой идеей, в настоящее время mongodb может манипулировать только реальными объектами даты в агрегации, он не может приводить строки к датам, как это могут сделать специалисты SQL.   -  person Sammaye    schedule 16.10.2013
comment
Итак, если я вставлю unixtime в виде строки, это сработает?   -  person user2885793    schedule 16.10.2013
comment
Я так не думаю, или это будет очень сложно, вы хотите вставить, используя собственный объект даты MongoDB, то есть ISODate или в PHP MongoDate, вам также понадобится время, чтобы начать с   -  person Sammaye    schedule 16.10.2013
comment
Я обновил базу данных, чтобы использовать MongoDate, но теперь я не знаю, как ее запрашивать, чтобы запрашивать данные НЕ старше недели, я пробовал: `array('$sort' => array('dt' = › array('$gt' =› new \MongoDate(strtotime('10/1/2013'))))),` но не работает   -  person user2885793    schedule 16.10.2013


Ответы (1)


Используя MongoDate, вы можете:

$this->aggregate(
    array(
       array('$match' => array( 'seen' => 0, 'dt' => array('$gte'=> new \MongoDate(strtotime('-1 week'))))),
       array('$sort' => array( '_id' => self::SORT_DESC)),
       array('$group' => array('_id' => '$target_user',
          'type' => array('$push'=> array('type' => '$type',
              'title'=>'$title',
              'link'=>'$link',
              'dt'=>'$dt',
              'own'=>'$own',
              'usr'=>'$usr'))
    )),
 ));
person Sammaye    schedule 16.10.2013