在Mongodb中找不到与java中的确切日期匹配的文档
声明:我正在尝试使用java从MongoDB集合(Emp)获取文档 条件:与某人的出生日期相匹配 问题:但是,它从不返回记录 但它在其他领域(如EmpID或EmpName等)也非常有效。我收藏的文档如下所示在Mongodb中找不到与java中的确切日期匹配的文档,java,mongodb,automation,Java,Mongodb,Automation,声明:我正在尝试使用java从MongoDB集合(Emp)获取文档 条件:与某人的出生日期相匹配 问题:但是,它从不返回记录 但它在其他领域(如EmpID或EmpName等)也非常有效。我收藏的文档如下所示 { "_id" : ObjectId("5d4d9059f0b31921a4916a0c"), "EmpID" : "1001", "EmpName" : "John", "Sal" : 30000.0, "DOB" : ISODate("1
{
"_id" : ObjectId("5d4d9059f0b31921a4916a0c"),
"EmpID" : "1001",
"EmpName" : "John",
"Sal" : 30000.0,
"DOB" : ISODate("1989-06-09T18:30:00.000+0000"),
"Age" : 31.0
}
请查找我尝试过的以下java代码
BasicDBObject dbo = new BasicDBObject();
dbo.append("DOB", new BasicDBObject("$eq","1989-06-10T00:00:00.000"));
FindIterable<Document> doc = coll.find(dbo);
for (Document dox : doc)
{
System.out.println(dox.toJson());
}
BasicDBObject dbo=new BasicDBObject();
dbo.追加(“DOB”,新的基本对象(“eq”,“1989-06-10T00:00:00.000”);
FindTable文档=coll.find(dbo);
用于(文档dox:doc)
{
System.out.println(dox.toJson());
}
请帮助对于ISODate,需要在
BasicDBObject
中传递Date
对象,而不是字符串
,还必须提供时区:
dbo.append(“DOB”,新的基本对象($eq),新的简化格式(“yyyy-MM-dd'T'HH:MM:ss.SSSXX”).parse(“1989-06-10T00:00:00.000+0000”);
对于出生日期,最好同时使用$gte
和$lt
比较运算符,以获取完整的一天范围,如下所示:
datedaystart=newsimpledateformat(“yyyy-MM-dd'T'HH:MM:ss.SSSXX”).parse(“1989-06-10T00:00:00.000+0000”);
Date dayEnd=新的简化格式(“yyyy-MM-dd'T'HH:MM:ss.SSSXX”).parse(“1989-06-11T00:00:00.000+0000”);
BasicDBObject query=newBasicDBObject(“日期”,newBasicDBObject(“$gt”,dayStart”)。追加($lte,dayEnd));
您的示例令人困惑。您的文档值和查询值相差五个半小时。并且您的查询值没有任何UTC或时区偏移量的指标,而文档值显示的偏移量为零(对于UTC本身)。顺便说一下,在该文档值上:我建议始终在UTC偏移量的小时和分钟之间包含可选的冒号。因此,+00:00
而不是+0000
。我见过至少两个库在遇到不带冒号的值时会崩溃。谢谢Basil的回答。实际上,MongoDB以UTC格式保存日期,通常比原始日期值短5个半小时。我输入的DOB值为1989-06-10,但存储为“1989-06-09T18:30:00.000+00:00”。请参考:谢谢Andrei,您的解决方案只需稍加修改即可工作。Date dayStart=新的简化格式(“yyyy-MM-dd'T'HH:MM:ss.SSSXX”).parse(“1989-06-10T00:00:00.000+0000”);Date dayEnd=新的简化格式(“yyyy-MM-dd'T'HH:MM:ss.SSSXX”).parse(“1989-06-11T00:00:00.000+0000”);BasicDBObject dbo=新的BasicDBObject(“DOB”,新的BasicDBObject(“$gte”,dayStart))。追加(“DOB”,新的BasicDBObject($lte,dayStart));