通过Date with Criteria lt& amp; Spring Boot MongoRepository查询gte给出了错误的结果

时间:2016-08-04 14:22:39

标签: java spring date mongorepository

当我在Spring Boot应用程序中使用Criteria通过Date字段查询MongoRepository时,结果是错误的。这是我的方法:

Query query = new Query(new Criteria().andOperator(
    Criteria.where("id").is(filter.getId()),
    Criteria.where("datas.ts").lt(filter.getEndTime()).gte(filter.getStartTime())
));

List<PhaseData> phaseDatas = mongoOperations.find(query, PhaseData.class);
List<Data> result = new ArrayList<Data>();

for(Data pData : phaseDatas) {
    result.addAll(pData.getDatas());
}

return result;

当我用

查询时

{ "id" : "1234", "startTime" : "2016-08-04 12:00", "endTime" : "2016-08-04 15:00" }

它为我提供了小时16:54&amp; 21:12也是。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

不确定这是否直接解决了您的问题。

数据库不会向查询返回错误的结果。所以我认为这可能是以下事情之一:

  1. 可能是当您在mongodb中查看文档时,它以iso格式显示日期。因此,请以与为查询创建日期相同的格式查看文档。
  2. 可能是时区问题。
  3. Mongodb dates可被视为ISODate(MongoDB Date

    查询时,在时区中创建日期对象。因此,作为第一个调试措施,我会看到我的数据库和查询时区是否相同。

    此外,如果通过使用SimpleDateFormat(SDF不是线程安全的)在ISODate中创建日期对象进行查询,可能会有所帮助。

    我发现它可能会让人感到困惑,因为您发送的日期格式不同,您在mongodb工具中直观显示的文档以iso格式显示日期。我认为这可能是问题所在。结果很好,但是你可能会以不同的方式看待这两件事,这会引起混乱。