Mongodb 为什么spring data mongo没有返回有时间的字段?

Mongodb 为什么spring data mongo没有返回有时间的字段?,mongodb,spring-boot,spring-data-mongodb,mongotemplate,Mongodb,Spring Boot,Spring Data Mongodb,Mongotemplate,我的收藏中有一份文件,如 { "_id" : ObjectId("5e3aaa7cdadc161d9c3e8014"), "carrierType" : "AIR", "carrierCode" : "TK", "flightNo" : "2134", "depLocationCode" : "DEL", "arrLocationCode" : "LHR", "depCountryCo

我的收藏中有一份文件,如

{
        "_id" : ObjectId("5e3aaa7cdadc161d9c3e8014"),
        "carrierType" : "AIR",
        "carrierCode" : "TK",
        "flightNo" : "2134",
        "depLocationCode" : "DEL",
        "arrLocationCode" : "LHR",
        "depCountryCode" : "DELHI",
        "arrCountryCode" : "LONDON",
        "scheduledDepDateTime" : ISODate("2020-02-05T00:30:00Z")

}
{
        "_id" : ObjectId("5e3aaacddadc161d9c3e8015"),
        "carrierType" : "AIR",
        "carrierCode" : "TK",
        "flightNo" : "2021",
        "depLocationCode" : "DEL",
        "arrLocationCode" : "LHR",
        "depCountryCode" : "DELHI",
        "arrCountryCode" : "LONDON",
        "scheduledDepDateTime" : ISODate("2020-02-05T00:00:00Z")
} 
我把标准放在

   Criteria criteria = new Criteria();
    criteria = criteria.and("carrierCode").is("TK");
     String from = "2020-02-05";
      String to = "2020-02-05";
                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                    Date toDate = dateFormat.parse(to);
                    Date fromDate = dateFormat.parse(from);
                    criteria = criteria.and("scheduledDepDateTime").gte(fromDate).lte(toDate);

但是我只得到了有时间
00
的字段,而不是文档的两个字段。我有两份文件的日期,但作为回应,只有一份。我尝试过很多事情,但都没有成功。我只想比较日期而忽略时间。请提供帮助。

mongod中的ISODate以毫秒分辨率存储为历元时间戳

dateFormat.parse
可能返回ISODate(“2020-02-05T00:00:00.000Z”),它将作为
1580860800000
存储在数据库中

这实际上意味着您的查询是
{scheduledededupdatetime:{$gte:15808600000,$lte:15808600000}
,因此唯一可能满足筛选器要求的值是ISODate(“2020-02-05T00:00:00.000Z”)

要获取该日期的所有文档,您可以尝试将您的
toDate
设置为第二天,并使用
$lt
而不是
$lte

开始日期和结束日期必须分别为该日期的最低时间和最高时间;这将覆盖一天中的所有时间

要将同一字段(“ScheduledUpdate Time”)与$and运算符一起使用,必须使用
标准
and运算符,而不是
(请参阅)

更新代码:

Criteria criteria = new Criteria();
criteria = criteria.and("carrierCode").is("TK");

String from = "2020-02-05 00:00:00";
String to = "2020-02-05 23:59:59";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd H:m:s");
Date toDate = dateFormat.parse(to);
Date fromDate = dateFormat.parse(from);

criteria = criteria.andOperator(where("scheduledDepDateTime").gte(fromDate), where("scheduledDepDateTime").lte(toDate)));

// Query qry = new Query(criteria);
// List<SomeClassName> result = mongoTemplate.find(qry, SomeClassName.class, "collection_name");
标准=新标准();
标准=标准,且(“承运人代码”)为(“TK”);
字符串from=“2020-02-05 00:00:00”;
字符串to=“2020-02-05 23:59:59”;
DateFormat DateFormat=新的简化格式(“yyyy-MM-dd H:m:s”);
Date toDate=dateFormat.parse(to);
datefromdate=dateFormat.parse(from);
criteria=criteria.andOperator(其中(“ScheduledUpdate”).gte(fromDate),其中(“ScheduledUpdate”).lte(toDate));
//Query qry=新查询(条件);
//List result=mongoTemplate.find(qry,SomeClassName.class,“集合名称”);

正如@prasad所建议的那样,todate必须是该日期的最低时间和最高时间我必须将todate字段中的时间设置为23:23:59,就像这样,它可以工作

 public static Date convertToDate(final Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        return cal.getTime();
    } 

谢谢@Prasad,但是我在请求中只得到了字符串from=“2020-02-05”这样的日期,所以当我使用DateFormat DateFormat=new SimpleDateFormat(“yyy-MM-dd H:m:s”);它给了我格式异常,因为请求中没有时间。另外,我如何在我的toDate字段(如2020-02-05 23:59:59)中添加时间。因为我的请求中只有日期。请求开始/结束日期数据(字符串类型)可以在程序中分别附加“00:00:00”和“23:59:59”。然后,解析这些字符串以获得所需的
fromDate
toDate
,您可以在查询中使用这些字符串。