gpt4 book ai didi

mongodb - 使用 Jongo 在 MongoDB 中使用 $lt 操作数查找 5 天前的文档 - 查询返回空结果

转载 作者:可可西里 更新时间:2023-11-01 10:02:52 26 4
gpt4 key购买 nike

MongoDB 集合中的数据具有格式

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

Mongo DB 查询和结果

> 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)) }}");

最后一个查询没有返回任何结果,没有任何错误,所以我无法确定我的查询有什么问题。

基本上,想在 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 天前的文档,请使用 $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 } } );

用Jongo得到同样的结果

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

您查询 Jongo 时遇到的问题是一样的。您尝试按 Date 类型查找,但集合中文档的日期字段是 NumberLong,即 Date 类型的毫秒长表示形式。

您不能使用 $gt 等运算符比较 2 个不同的类型。

关于mongodb - 使用 Jongo 在 MongoDB 中使用 $lt 操作数查找 5 天前的文档 - 查询返回空结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38742850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com