1

当我在 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:5421:12我该如何解决这个问题?

4

1 回答 1

0

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

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

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

Mongodb日期可以认为是 ISODate ( MongoDB Date )

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

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

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

于 2016-08-04T14:47:52.477 回答