Data in MongoDB collection has format
{ "_id" : ObjectId("57a1bfc103c8851a98dba3b2"), "createdOn": NumberLong("1470218177561"), "name": "Raja", "description": "Employee Raja" }
Mongo DB Query and Results
> 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)) }}");
The last query returns no result without any errors, so I can't determine what is wrong with my query.
Basically, want to find the records for the last 5 days with `$lt operator in Jongo. Tried the next query, but it also not working
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -5);
Date dateBefore = cal.getTime();
collection.find("{createdOn: {$gte : #}}", dateBefore).as(type);
Thanks.
You are comparing
NumberLong("1470218177561") vs new Date(NumberLong(1888888888888))
instead of comparing
NumberLong("1470218177561") vs NumberLong(1888888888888)
In your particular case the query will be
db.employee.find( { createdOn: { $lt: NumberLong(1888888888888) } } );
To find documents that are 5 days old you can look at.
To get current date in milliseconds
> new Date(new Date()).getTime()
1470232681000
To find 5 days old documents use $gt operator on the date that is 5 days before now
> new Date(new Date()).getTime() - 5 * 24 * 60 * 60 * 1000
1469800939000
So the query will be
db.employee.find( { createdOn: { $gt: new Date(new Date()).getTime() - 5 * 24 * 60 * 60 * 1000 } } );
To get the same result with Jongo
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
employees.find("{ createdOn: { $gt: # } }", cal.getTimeInMillis() - 5 * 24 * 60 * 60 * 1000);
The problem with your query for Jongo was the same. You were trying to find by Date type, but date field of documents in your collection is NumberLong, that is millisecond long representation of Date type.
You cannot compare 2 different types with operators like $gt.