Spring Boot MongoRepository 通过带有条件的日期查询 lt & gte 给出错误的结果



当我在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" }

它给了我一个小时CCD_ 2&21:12。我该如何解决这个问题?

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

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

  1. 当您在mongodb中查看文档时,它可能会以iso格式显示日期。因此,查看文档的格式与创建查询日期的格式相同
  2. 这可能是时区问题

Mongodb日期可以被视为ISODate(Mongodb日期)

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

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

我发现这可能会令人困惑,因为您发送的日期是不同的格式,而您在mongodb工具中看到的文档显示的是iso格式的日期。我认为这可能是问题所在。结果是好的,但可能你对这两件事的看法不同,这会导致混乱。

最新更新