Сценарий: Рассмотрим я имею коллекцию под названием 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
находится в строчном формате.
Вопрос: Есть ли способ, чтобы я мог получить ожидаемый результат без изменения типа поля строки до даты?
ИСО 8601 такие строки должны работать нормально для запросов диапазона дат. Это одно из преимуществ формата. Ваш пример запроса возвращает ваш пример doc, как и ожидалось. – JohnnyHK
@JohnnyHK: Спасибо ... Точно это работает на моей локальной БД, но тот же запрос терпит неудачу, ожидаемый на реальном сервере. Существуют ли зависимости от версии? –
@AmolMKulkarni Из любопытства вы узнали, почему он не работает на сервере? Я работаю над запросом между диапазонами времени и сталкивался с этим во время поиска. – Raghuveer