使用 Jongo 在 MongoDB 中查找具有 $lt 操作数的 5 天旧文档 - 查询 returns 空结果
find 5 days old documents with $lt operand in MongoDB with Jongo - query returns empty result
Mongo数据库集合中的数据具有格式
{ "_id" : ObjectId("57a1bfc103c8851a98dba3b2"), "createdOn": NumberLong("1470218177561"), "name": "Raja", "description": "Employee Raja" }
Mongo 数据库查询和结果
> 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)) }}");
最后一个查询returns没有任何错误的结果,所以我无法确定我的查询有什么问题。
基本上,想在 Jongo 中使用 `$lt 运算符查找最近 5 天的记录。尝试了下一个查询,但它也不起作用
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -5);
Date dateBefore = cal.getTime();
collection.find("{createdOn: {$gte : #}}", dateBefore).as(type);
谢谢。
你在比较
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 天前的文档,请在现在之前 5 天的日期使用 $gt
运算符
> 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 } } );
要得到与 Jongo 相同的结果
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
employees.find("{ createdOn: { $gt: # } }", cal.getTimeInMillis() - 5 * 24 * 60 * 60 * 1000);
你查询 Jongo 的问题是一样的。您试图通过 Date
类型查找,但您集合中文档的日期字段是 NumberLong
,即 Date
类型的毫秒长表示形式。
您不能将 2 种不同的类型与 $gt
等运算符进行比较。
Mongo数据库集合中的数据具有格式
{ "_id" : ObjectId("57a1bfc103c8851a98dba3b2"), "createdOn": NumberLong("1470218177561"), "name": "Raja", "description": "Employee Raja" }
Mongo 数据库查询和结果
> 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)) }}");
最后一个查询returns没有任何错误的结果,所以我无法确定我的查询有什么问题。
基本上,想在 Jongo 中使用 `$lt 运算符查找最近 5 天的记录。尝试了下一个查询,但它也不起作用
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -5);
Date dateBefore = cal.getTime();
collection.find("{createdOn: {$gte : #}}", dateBefore).as(type);
谢谢。
你在比较
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 天前的文档,请在现在之前 5 天的日期使用 $gt
运算符
> 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 } } );
要得到与 Jongo 相同的结果
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
employees.find("{ createdOn: { $gt: # } }", cal.getTimeInMillis() - 5 * 24 * 60 * 60 * 1000);
你查询 Jongo 的问题是一样的。您试图通过 Date
类型查找,但您集合中文档的日期字段是 NumberLong
,即 Date
类型的毫秒长表示形式。
您不能将 2 种不同的类型与 $gt
等运算符进行比较。