【问题标题】:Mongodb query on date has no results (java)Mongodb查询日期没有结果(java)
【发布时间】:2013-05-02 15:44:36
【问题描述】:

我的 mongodb 查询没有返回任何结果,我不知道为什么。

这里是我数据的相关内容:

> db.reports.find({},{endDate:1})
{ "_id" : ObjectId("5182882ae4b032c67674c494"), "endDate" : ISODate("2013-05-02T15:37:11.032Z") }
{ "_id" : ObjectId("51828859e4b032c67674c495"), "endDate" : ISODate("2013-05-02T15:37:57.749Z") }

所以我有两个日期为 2013-05-02 15:37:11-57 的条目

我想查找日期小于或等于最新日期的所有条目,但使用此查询没有得到任何结果:

db.reports.find({ "endDate" : { "$lte" : { "$date" : "2013-05-02T15:37:11.032Z"}}},{endDate:1})

我正在使用 java 生成查询:

BasicDBObject oldReportSelector = (BasicDBObject) BasicDBObjectBuilder.start()
    .add("endDate", 
        BasicDBObjectBuilder.start().add("$lte",myDate).get())
    .get();

我在这里做错了什么?

编辑添加: myDate 的计算方法是:

Date endDate = new Date()
Date myDate = new Date(endDate.getTime()-(interval*quantityArchivedReports));

当前间隔 = 86400000 和数量ArchivedReports = 4

【问题讨论】:

  • 您在 Java 代码中使用的 myDate 变量是什么?什么是类和值?
  • Pawel:我已经添加了额外的信息。 Pangea:感谢您的链接。虽然我可以更改为使用 DateTime,但我宁愿理解为什么我所拥有的东西不起作用。 Mongodb 声称原生支持 java.util.Date 所以我的查询一定有问题

标签: java mongodb date


【解决方案1】:

你在 shell 中没有得到任何东西的原因是你没有使用 shell 期望的日期格式。尝试将您的查询更改为:

> db.reports.find({ "endDate" : { "$lte" : new Date("2013-05-02T15:37:11.032Z")}})

{ "_id" : ObjectId("5182882ae4b032c67674c494"), "endDate" : ISODate("2013-05-02T15:37:11.032Z") }

然后您可以使用 shell 来验证您的代码是否确实生成了正确的日期来取回任何数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    相关资源
    最近更新 更多