Java与MongoDB的ISODate查询问题

5

我知道我刚刚问了另一个关于此问题的问题,但是答案让我提出这个问题,我认为创建另一个问题是合适的。

我在MongoDB中有一个对象,看起来像这样:

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

我需要创建的查询语句应该像这样(对象中的日期在这两个日期之间):

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

很遗憾,我正在使用Java,但是结果出现了一些问题。这是我的Java查询:

java.util.Date fromDate;
java.util.Date toDate;
BasicDBObject searchQuery = new BasicDBObject();

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

几乎所有我在互联网上查询相关信息都建议我使用上面的Java代码进行此查询,但是这个查询的文本输出结果是:
{"dateModified" : { "$gte" : { "$date" : "2015-01-19T00:00:00.000Z"} , "$lte" : { "$date" : "2015-01-25T00:00:00.000Z"}}

这个查询没有返回任何结果,因为它没有使用ISODate格式进行查询。编辑:我的意思是,如果我在mongo shell中使用上面的查询,我将得不到任何结果,但如果我使用我发布的第一个查询,我会得到结果。

我的问题是为什么它不会自动转换为ISODate格式,就像大家说的那样?或者,我该怎么做才能确保这个查询转换为ISODate格式?


使用https://github.com/mongodb/morphia,它更加友好。 - walves
如果它能正常工作,那就不用担心了。https://jira.spring.io/browse/DATAMONGO-671 - Larry Battle
1个回答

2
如果您在 Java 中实际运行该查询,它将正常工作。但是将文本输出粘贴到 shell 中将无法正常工作,因为 Java 驱动程序的 BSON 文档的文本输出格式是 MongoDB 扩展 JSON(MongoDB Extended JSON),这与 mongoexport 等工具使用的格式相同。然而,shell 不理解这种格式。有一个 Jira 问题 请求 shell 支持扩展 JSON。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接