Java& MongoDB查询日期范围

时间:2015-01-27 17:17:37

标签: java mongodb date range

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

但我有一点不同。我有一张表保存了许多文件的历史记录。因此,我需要查询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);

这不会返回任何结果。这段代码生成的MongoQuery如下所示:

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

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

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

这个对象应该清楚地匹配查询,但没有任何回报,任何想法?

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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