无法按日期查询mongodb

时间:2013-09-07 08:38:40

标签: mongodb datetime

我已经暂时采用了spring-data-mongo,但是当我需要定期fetch数据时,我会遇到一个拦截器,比如20 seconds。我使用ISODate对象,因此它的格式为ISODate("2013-08-09T05:51:16.140Z")

以下是示例文档

{
 "_id": "fffd8e68-e81a-4835-ac5c-ef532291584b",
 "_class": "net.publichealth.edowmis.datalayer.models.Post",
 "userID": "09258b84-6d09-4977-a0f1-4e59b963221f",
 "dateCreated": ISODate("2013-08-09T06:29:07.413Z"),
 "lastModified": ISODate("2013-08-09T06:29:07.413Z"),

}   

我想查询数据库以查找当时的所有条目:2013-08-09 06:29:07,但下面的查询没有工作。我在mongo shell(ubuntu终端)和rockmongo以及intellij mongo插件中尝试了这些查询

// rock mongo on post collection
   { 
     "dateCreated" : new ISODate("2013-08-09T06:29:07")
   } 

   { 
     "dateCreated" : new ISODate("2013-08-09 06:29:07")
   } 

   { 
     "dateCreated" : new ISODate("2013-08-09")
   } 

   // terminal and intelliJ
   db.post.find({"dateCreated":new ISODate("2013-08-09T06:29:07")}) // did all the combination above.

没有结果:(

我找不到捕获物。请帮我看一下

谢谢

1 个答案:

答案 0 :(得分:2)

首先,不要忘记Z。这是“zulu time”的ISO8601指标,这是另一种说“UTC”或“GMT”的方式。没有它,你只是代表一个“未指定的”时间,换句话说 - 一个不是一个独特时刻的日历位置,因为你没有说明它与UTC的关系。 (我不确定Mongo是否允许这些。)

其次,看起来你正在尝试进行完全相等的匹配。数据库中的值具有小数,但您查询的值不是。所以它们永远不会匹配,因为它们不是同一个值。

您可能希望进行范围查询。例如,您可以这样做:

db.post.find({"dateCreated": {"$gte": new ISODate("2013-08-09T06:29:07Z"),
                              "$lt":  new ISODate("2013-08-09T06:29:08Z")}})

另见this documentation