2016-08-03 13 views
2

данных в коллекции MongoDB имеет Отформатируйте

{ "_id" : ObjectId("57a1bfc103c8851a98dba3b2"), "createdOn": NumberLong("1470218177561"), "name": "Raja", "description": "Employee Raja" } 

Монго DB Query и результаты

> new Date(1470218177561); 
ISODate("2016-08-03T09:56:17.561Z") 

> new Date(1888888888888); 
ISODate("2029-11-09T03:21:28.888Z") 

> db.employee.find("{createdOn: { $lt: new Date(NumberLong(1888888888888)) }}"); 

Последние запрос возвращает нет результата без каких-либо ошибок, поэтому я не могу определить, что не так с моим запросом.

В принципе, вы хотите найти записи за последние 5 дней с оператором `$ lt в Jongo. Пробовал следующий запрос, но он также не работает

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DATE, -5); 
Date dateBefore = cal.getTime(); 
collection.find("{createdOn: {$gte : #}}", dateBefore).as(type); 

Спасибо.

+1

Удалить двойные кавычки: 'db.employee.find ({createdOn: {$ ЛТЫ: новая Дата (NumberLong (1888888888888))}});' – tarashypka

+0

Still Монго возвращают оболочки пустых записей даже после удаления двойных кавычек – Kathire

ответ

3

Вы сравниваете

NumberLong("1470218177561") против new Date(NumberLong(1888888888888))

вместо сравнения

NumberLong("1470218177561") против NumberLong(1888888888888)

В вашем конкретном случае запрос будет

db.employee.find({ createdOn: { $lt: NumberLong(1888888888888) } }); 

Чтобы найти документы, которые имеют 5 дней, вы можете look at.

Чтобы получить текущую дату в миллисекундах

> new Date(new Date()).getTime() 
1470232681000 

найти 5 дней документы используют $gt оператора на дату, которая за 5 дней до сих пор

> new Date(new Date()).getTime() - 5 * 24 * 60 * 60 * 1000 
1469800939000 

Таким образом, запрос будет

db.employee.find({ createdOn: { $gt: new Date(new Date()).getTime() - 5 * 24 * 60 * 60 * 1000 } }); 

Чтобы получить тот же результат с Джонго

Calendar cal = Calendar.getInstance(); 
cal.setTime(new Date()); 
employees.find("{ createdOn: { $gt: # } }", cal.getTimeInMillis() - 5 * 24 * 60 * 60 * 1000); 

Проблема с вашим запросом для Джонго было то же самое. Вы пытались найти по типу Date, но поле даты документов в вашей коллекции - NumberLong, то есть миллисекунда длинное представление Date.

Вы не можете сравнить 2 разных типа с операторами, такими как $gt.

+0

В основном я хотите получить записи меньше заданной даты. Пожалуйста, дайте мне знать запрос на вышеуказанный – Kathire

+0

@ Kathire Обновлен ответ – tarashypka

+0

Большое спасибо за ответ. отправка другого вопроса, связанного с запросом mongo api.пожалуйста, пожалуйста, помогите, если это возможно – Kathire

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

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