Lithium и MongoDB: поиск документов по диапазону дат

У меня есть множество документов, содержащих поле под названием «дата», которое является просто временной меткой unix. в литии я хочу найти все документы в заданном диапазоне дат. сейчас я пытаюсь сделать следующее:

//$_stats contains two \DateTime objects which are properly initialized

$transactions = Transactions::all(
  array('conditions' => array(
                'tags' => array('$all' => array((string)$tag->_id)),
                'date' => array('$gte' => array((int)$_stats['date_start']->getTimestamp()), '$lte' => array((int)$_stats['date_end']->getTimestamp()))
  ))
);

Но это возвращает нулевые документы. Когда я убираю условие «дата», все работает нормально, и я получаю все документы.

Что мне не хватает?

Спасибо, аэногим


person aeno    schedule 15.07.2012    source источник


Ответы (1)


Кажется, нет необходимости указывать массив дат, поэтому, возможно, попробуйте:

$transactions = Transactions::all(
  array('conditions' => array(
            'tags' => array('$all' => array((string)$tag->_id)),
            'date' => array('$gte' => (int)$_stats['date_start']->getTimestamp(), '$lte' => (int)$_stats['date_end']->getTimestamp())
  ))
);

Имейте в виду, что MongoDate хранит даты в миллисекундах, а временная метка использует секунды. Другими словами, MongoDate имеет более высокую точность.

person Marcin Necsord Szulc    schedule 15.07.2012