Java & MongoDB 查询日期范围

Java & MongoDB query for date range

在我开始之前,我已经四处寻找这个问题的答案,我能想到的最佳答案是 this question

不过我有一点不同。我有一个 table 维护许多文档的历史记录。因此我需要查询 ID 和日期范围。这是我的查询目前在 Java

中的样子
BasicDBObject searchQuery = new BasicDBObject();

searchQuery.put("id", id);
searchQuery.put("dateModified", BasicDBObjectBuilder.start("$gte", fromDate).add("$lte", toDate).get());

DBCursor cursor = table.find(searchQuery);

这个returns没有结果。此代码块生成的 MongoQuery 如下所示:

db.history.find({ "id" : 12345 , "dateModified" : { "$gte" : { "$date" : "2015-01-19T00:00:00.000Z"} , "$lte" : { "$date" : "2015-01-25T00:00:00.000Z"}}});

当我手动将其输入 MongoDB 命令行时,这也 returns 没有结果。我目前在数据库中有一条记录用于测试目的,如下所示:

{
    "id" : NumberLong(12345),
    "dateModified" : ISODate("2015-01-21T19:42:28.044Z")
}

此对象应该与查询明确匹配,但没有任何返回,有什么想法吗?

EDIT: 结果是查询对象生成的字符串与数据库中的ISODate 对象不匹配。我想澄清一下,fromDate 和 toDate 都是 java.util.Date 对象。我仍然不确定如何解决这个问题。

fromDate 必须是 Date 类型而不是字符串表示形式。 MongoDB 存储引擎中的 ISODate 不等于同一日期的字符串表示,因此它们不匹配。

我想通了这个问题。我不明白原因,但问题是 BasicDBObjectBuilder 没有正确使用 Date 对象。我切换到 QueryBuilder 并构建了完全相同的查询并返回了结果。