Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Mongodb中找不到与java中的确切日期匹配的文档_Java_Mongodb_Automation - Fatal编程技术网

在Mongodb中找不到与java中的确切日期匹配的文档

在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

声明:我正在尝试使用java从MongoDB集合(Emp)获取文档

条件:与某人的出生日期相匹配

问题:但是,它从不返回记录

但它在其他领域(如EmpID或EmpName等)也非常有效。我收藏的文档如下所示

{ 
    "_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));