2013-05-25 2 views
9

Сценарий: Рассмотрим я имею коллекцию под названием MyCollection, с следующими данными:Как запросить диапазон дат в коллекции MongoDB, где дата ISO хранится в поле строки?

{ 
    "_id" : 'MyUniqueID_01' 
    "CreatedTime" : "2013-12-01T14:35:00Z", 
    "LastModifiedTime" : "2013-12-01T13:25:00Z" 
} 

Теперь я хочу, чтобы запросить базу данных MongoDB, где упомянутый выше тип данных находится в огромном количестве документов. И мой запрос основан на диапазоне дат т.е. с использованием $gt, $gte, $lt & $lte

Так что мой запрос может быть что-то вроде:

db.MyCollection.find({ 'CreatedTime': {$gt: '2013-05-25T09:29:40.572Z'}}) 

Учитывая приведенные выше примеры ожидаемый результат, запрос должен получить document (поскольку «CreatedTime»: «2013-12-01T14: 35: 00Z» больше значения, переданного в запросе «2013-05-25T09: 29: 40.572Z»); тогда как это не так, проблема в том, что поле CreatedTime находится в строчном формате.

Вопрос: Есть ли способ, чтобы я мог получить ожидаемый результат без изменения типа поля строки до даты?

+1

ИСО 8601 такие строки должны работать нормально для запросов диапазона дат. Это одно из преимуществ формата. Ваш пример запроса возвращает ваш пример doc, как и ожидалось. – JohnnyHK

+0

@JohnnyHK: Спасибо ... Точно это работает на моей локальной БД, но тот же запрос терпит неудачу, ожидаемый на реальном сервере. Существуют ли зависимости от версии? –

+0

@AmolMKulkarni Из любопытства вы узнали, почему он не работает на сервере? Я работаю над запросом между диапазонами времени и сталкивался с этим во время поиска. – Raghuveer

ответ

9

Вы можете делать запросы точно так же, как в примере.

Порядок строчек согласован и даст вам точные отношения, которые вы хотите.

+3

Да, но я бы также добавил, что строка запроса должна использовать тот же самый суффикс часового пояса, что и набор данных (что также добавляет еще одно ограничение на то, как вы храните строки данных), потому что вы выполняете сравнение строк. Например, пример OP находится в форме UTC ISO 8601 (с суффиксом «Z»), поэтому строка запроса также должны быть в этой форме. –

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

  • Нет связанных вопросов^_^