无法按日期查询mongodb

无法按日期查询mongodb,mongodb,datetime,Mongodb,Datetime,我已经采用了spring-data-mongo一段时间了,但是当我需要定期获取数据时,我会打一个拦截器,比如说每隔20秒。我使用ISODate对象,因此它的形式是ISODate(“2013-08-09T05:51:16.140Z”) 下面是一个示例文档 { "_id": "fffd8e68-e81a-4835-ac5c-ef532291584b", "_class": "net.publichealth.edowmis.datalayer.models.Post", "userID": "

我已经采用了
spring-data-mongo
一段时间了,但是当我需要定期
获取
数据时,我会打一个拦截器,比如说每隔
20秒
。我使用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
,但下面的查询没有一个有效。我在
mongoshell
(ubuntu终端)和
rockmongo
intellijmongo
插件中尝试了这些查询

// 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.
无结果:(

我找不到鱼了。请帮我看看


谢谢你

首先,别忘了
Z
。这是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")}})

另请参见。

太好了,你就是那个人!!再次感谢。如果你熟悉spring数据,你能在回答中添加一种最好的方式来形成java date对象以获得按范围的结果吗?应该考虑JodaTime吗?IMHO-Joda Time应该一直考虑,但这并不意味着它是必需的。我不确定是否遵循了你的其余命令nt,但听起来这应该是一个新问题,有支持性的细节。好的,谢谢,我会自己做一些东西,如果仍然不起作用,我会写一篇帖子。