[英]Unable to find a document in Mongodb where exact date match in java
Statement: I am trying to get the documents from MongoDB collection (Emp) using java. 声明:我正在尝试使用Java从MongoDB集合(Emp)中获取文档。
Condition: Where it matches with the DOB(Date of birth) of a person. 条件:与人的出生日期(DOB)匹配的地方。
Problem: However, it never returns a record. 问题:但是,它从不返回记录。
But it works perfectly for other fields such as EmpID or EmpName etc. The document of my collection looks like this, 但这对其他字段(例如EmpID或EmpName等)非常有效。我收藏的文档看起来像这样,
{
"_id" : ObjectId("5d4d9059f0b31921a4916a0c"),
"EmpID" : "1001",
"EmpName" : "John",
"Sal" : 30000.0,
"DOB" : ISODate("1989-06-09T18:30:00.000+0000"),
"Age" : 31.0
}
Please find the following java code that I have tried, 请找到我尝试过的以下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());
}
Please help 请帮忙
For ISODate it's needed to pass the Date
object in BasicDBObject
, not String
, also timezone must be provided: 对于ISODate,需要在BasicDBObject
传递Date
对象,而不是String
,还必须提供时区:
dbo.append("DOB", new BasicDBObject("$eq",new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXX").parse("1989-06-10T00:00:00.000+0000")));
For Date Of Birth better to use $gte
and $lt
comparition operators together in order to take full range of single day, like that: 对于“生日”,最好将$gte
和$lt
比较运算符一起使用,以便完整使用一天,例如:
Date dayStart = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXX").parse("1989-06-10T00:00:00.000+0000");
Date dayEnd = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXX").parse("1989-06-11T00:00:00.000+0000");
BasicDBObject query = new BasicDBObject("Date", new BasicDBObject("$gt", dayStart).append("$lte", dayEnd));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.