【发布时间】:2020-12-08 11:14:29
【问题描述】:
因此,如标题所示,我的 MongoDB 数据库中有以下示例文档:
{"_id":{"$oid":"5fcf541b466a3d10f55f8241"}, "dateOfBirth":"1992-11-02T12:05:17"}
如您所见,日期存储为字符串而不是 ISODate 对象。据我所知,MongoDB 应该仍然能够将其作为日期进行处理和查询。 (source)
因此,我尝试通过以下方式在我的 java 应用程序中使用 JDBC 查询它:
java.util.Date queryDate = new GregorianCalendar(1980, Calendar.JANUARY, 1).getTime();
Bson query = Filters.gte("dateOfBirth", queryDate);
FindIterable<Document> result = collection.find(query);
但是,这不起作用。我的想法是,如果我传入一个 java.util.Date,那么 Filters.gte() 方法就会知道我的意思是查询一个日期,它会在 MongoDB 中按预期工作。但是,我得到 0 个匹配项。
我还尝试在我的 queryDate 上放置一个格式化程序(之前用于不同的目的):
DateFormat dformat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Bson query = Filters.gte("dateOfBirth", dformat.format(queryDate));
但是,这导致 Filters.gte() 将其作为字符串查询,根据 String-Comparison,因此大致按字母顺序。这让我最初认为原来的 java.util.Date 版本确实/应该知道,我查询的是日期而不是字符串,它只是以某种方式未能将数据库中的日期类型转换为日期类型?我不确定它应该如何工作。
我知道这是一个小众案例用法,我确实应该在 mongoDB 中插入日期作为 ISODate,但是在我现在的特殊情况下,这不是一个选项。
如果我使用 JDBC,有没有办法在 MongoDB 中查询存储为字符串的日期?
【问题讨论】: