当我在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
也是。我该如何解决这个问题?
答案 0 :(得分:0)
不确定这是否直接解决了您的问题。
数据库不会向查询返回错误的结果。所以我认为这可能是以下事情之一:
Mongodb dates可被视为ISODate(MongoDB Date)
查询时,在时区中创建日期对象。因此,作为第一个调试措施,我会看到我的数据库和查询时区是否相同。
此外,如果通过使用SimpleDateFormat(SDF不是线程安全的)在ISODate中创建日期对象进行查询,可能会有所帮助。
我发现它可能会让人感到困惑,因为您发送的日期格式不同,您在mongodb工具中直观显示的文档以iso格式显示日期。我认为这可能是问题所在。结果很好,但是你可能会以不同的方式看待这两件事,这会引起混乱。