2016-12-19 4 views
0

Как найти объекты между двумя диапазонами дат в MongoDBКак найти объекты между двумя диапазонами дат в MongoDB

{ 
"_id" : ObjectId("583b47e6d991392532ec6ac0"), 
    "title" : "Title1", 
    "description" : "Description1", 
    "createdOn" : "10-Nov-2016 02:23 AM" 

} 

{ 
"_id" : ObjectId("583b47e6d991392532ec6ac1"), 
    "title" : "Title2", 
    "description" : "Description2", 
    "createdOn" : "15-Nov-2016 02:23 AM" 

} 

{ 
"_id" : ObjectId("583b47e6d991392532ec6ac2"), 
    "title" : "Title3", 
    "description" : "Description3", 
    "createdOn" : "28-Nov-2016 02:23 PM" 

} 

Как найти объекты между 10-Nov-2016 00:00 AM до 28-Nov-2016 12:59 вечера эта диапазон дат в MongoDB

Я попытался это одно, но получил ошибку

db.tasks.find({created_on: {$gte: ISODate("10-Nov-2016 00:00 AM"),$lt: ISODate("28-Nov-2016 12:59 PM")}}) 

Я использую JAVA и бэкенд, как MongoDB Пожалуйста, помогите мне ...

Моя ошибка это

2016-12-19T21:29:20.823+0530 E QUERY Error: invalid ISO date 
    at Error (<anonymous>) 
    at ISODate (src/mongo/shell/types.js:64:15) 
    at (shell):1:35 at src/mongo/shell/types.js:64 
+0

Было бы полезно, если бы вы указали ошибку в своем вопросе (ссылка) – chridam

+0

Какая ошибка возникла из-за ошибки? – mayk93

+0

@chiridam Я обновляю свою ошибку –

ответ

0

Похоже, что вы храните дату как строку. Сначала измените свои заявления о вставке, чтобы использовать ISODate.

Пример: ISODate("2016-12-19T06:01:17.171Z")

Все даты сохраняются в формате UTC в Монго дб.

Вы должны увидеть что-то подобное, когда получите коллекцию.

{ 
"_id" : ObjectId("583b47e6d991392532ec6ac2"), 
"title" : "Title3", 
"description" : "Description3", 
"createdOn" : ISODate("2016-12-19T06:01:17.171Z") 
} 

После этого, действительно, можно использовать оператор сравнения, чтобы найти дату в диапазоне дат.

db.tasks.find({created_on: {$gte: ISODate("2016-10-19T00:00:00.000Z"),$lt: ISODate("2016-10-28T00:00:00.000Z")}}) 
+0

Можно ли получить диапазон дат от строки, любым способом Sagr Ji –

+0

Сравнение не будет корректно использоваться для типов строк даты. Поэтому вам нужно сохранить их как типы даты. Невозможно ли изменить тип? Единственная альтернатива, которую я могу себе представить, как использование Java, - это получить все строки и проанализировать дату и сравнить их при повторном выполнении коллекции. Это не будет эффективно. – Veeram

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