2013-11-13 2 views
0

Привет, ребята, я новичок в mongodb и сталкиваюсь с некоторыми проблемами при сравнении дат в моей коллекции. У меня есть коллекция событий с полем dateCreated хранящих новый MongoDate() какСравнение MongoDate только для даты

"dateCreated": ISODate("2013-11-13T05: 23: 45.0Z") 

Теперь я хочу один из события, созданного сегодня. Для этого я пытался с запросом в рамках Yii, как

$db->event->findOne(array('dateCreated' => new MongoDate())); 

Но вернуть нуль, который я предполагаю, что из-за провала в сравнении значений времени, хранящиеся в dateCreated. Так может ли кто-нибудь предложить, как сравнивать только дату, а не время с MongoDate().

Заранее спасибо.

ответ

2

Чтобы запросить что-то созданное сегодня, вы будете хотеть использовать Монго $gt и $lt операторов искать ключ dateCreated в рамках «сегодня» в PHP:

$db->event->findOne(array('dateCreated' => array('$gt' => new MongoDate(strtotime("midnight")), '$lt' => new MongoDate(strtotime("11:59PM"))))); 
+0

спасибо, это работает меня. Также в приведенном выше запросе отсутствует отсутствующая скобка. Вы можете редактировать его, как показано ниже: $ db-> event-> findOne (массив ('dateCreated' => array ('$ gt' => новый MongoDate (strtotime ("полночь")), '$ lt' => новый MongoDate (strtotime («23:59 PM»))))); – xyz

0

Это возвращает значение null, потому что вы ищете коллекцию, созданную именно сейчас.

Вы тоже ищите range queries with date.

Таким образом, вы должны изменить это так:

$db->event->findOne(
    array('dateCreated' => array(
    '$gte' => timestamp of the current day 
)) 
); 

Насколько я понял, вы можете найти метку текущего дня таким образом:

mktime(0, 0, 0, date('n'), date('j')); 

, но я могу ошибаться в этой части.

Смежные вопросы