0

我已经采用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 终端)rockmongointellij 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.

没有结果 :(

我找不到钓点。请帮我看看

谢谢

4

1 回答 1

3

首先,不要忘记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")}})

另请参阅本文档

于 2013-09-07T17:15:53.797 回答