【问题标题】:Querying mongoTemplate using date使用日期查询 mongoTemplate
【发布时间】:2019-09-24 20:02:24
【问题描述】:

我试图在 Spring Java 中使用 mongoTemplate 查找某个日期之前的所有行。尽管有很多旧记录,但这不会返回任何行。

有什么问题?

Calendar cal = GregorianCalendar.getInstance();
cal.add( Calendar.DAY_OF_YEAR, -73);
Date prevDate = cal.getTime();
List<AuditTrailDTO> dt = mongoTemplate.find(Query.query(Criteria.where("AUDIT_CREATE_DATETIME").lte(prevDate)), AuditTrailDTO.class);

AUDIT_CREATE_DATETIME 在 Mongo DB 中是以这种格式存储的:

Audit_Create_DateTime:2019-07-10 08:47:02.078

【问题讨论】:

  • Audit_Create_DateTime 的类型是 Date 吗?还是原始的String?它应该适用于Date 类型...

标签: mongodb mongodb-query spring-data-mongodb


【解决方案1】:

如果Audit_Create_DateTime 的类型是Date,它应该可以工作,所以我假设Audit_Create_DateTimeString 类型。

您可以执行以下操作以在 String 字段上执行 less-than-equals 逻辑;

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");  
Query query = Query.query(Criteria.where("AUDIT_CREATE_DATETIME").lte(dateFormat.format(prevDate)));
List<AuditTrailDTO> dt = mongoTemplate.find(query, Customer.class);

这将返回正确的结果,但我建议将 Date 值正确存储为正确的类型,而不是 String 类型。

【讨论】:

  • 审计日期时间是 mongo dB 中的日期类型。所以不知道为什么它不起作用
  • @Sri 虽然格式看起来不是日期,但我认为它最后应该有一些时区值。我的最后有一个Z,你能确认类型是日期吗?检查文档的架构。否则你的prevDate 可能会以某种方式无效。
  • @Sri 您可以在您的问题中添加文档的架构吗?这会很有帮助!
  • 当我查看架构时,审核日期时间确实具有日期类型,有人可以向我粘贴示例代码,请在使用 mongoTemplate 的地方找到所有审核日期时间(mongoDb 中的字段类型为日期)的记录小于或等于某个日期示例(2019 年 7 月 22 日)
  • @Sri 他们用.lte() 找到的方式是正确的。我在本地使用 Mongo 的 Date 字段进行了测试,效果很好。如果Audit_Create_DateTimeDate 类型,那么唯一的问题一定是您使用的prevDate 是错误的。你能记录prevDate的值吗,你确定它的值是正确的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 2019-07-27
  • 2018-07-10
  • 1970-01-01
  • 2016-04-07
相关资源
最近更新 更多