2017-04-14 73 views
0

我有一個包含時間對象數組的集合,我想在最後一天獲取記錄,但我似乎無法弄清楚這一點。用格式對象排列搜索ISOdate

我是新來的mongodb,我一直使用SQL,所以也許這是在解決這個問題。

收藏:

{ 
    "_id" : ObjectId("58eb9f8738505a28267a6cd6"), 
    "times" : [ 
     { 
      "date" : "2017-04-13 14:16:47.000000", 
      "timezone_type" : 1, 
      "timezone" : "+00:00" 
     }, 
     { 
      "date" : "2017-04-10 14:16:47.000000", 
      "timezone_type" : 1, 
      "timezone" : "+00:00" 
     } 
    ], 
    "title" : "Awesome title", 
    "user" : 1, 
    "description" : " cool!", 
    "updated_at" : ISODate("2017-04-10T15:06:47.000Z"), 
    "created_at" : ISODate("2017-04-10T15:06:47.000Z") 
} 

我的MongoDB的查詢

db.getCollection('reminders').find({ 
     "times": { 
      $elemMatch: { 
       "date": { 
        $gte: {      
         $dateToString: { 
          format: "%Y-%m-%d %H:%i:%s.%L", 
          date: new Date(ISODate().getTime() - 1000 * 3600 * 24 * 1) 
         } 
        } 
       } 
      } 
     } 
}) 

現在我得到 「錯誤:行3:意外標記:」 在$ dateToString對象之內。 我該如何解決這個問題?

回答

1

$dateToString運算符只能用作聚合運算符。

對於find()方法的用法,您必須自己操作日期格式。有幾個庫可以做到,但手動操作也相當容易:

> var date = new Date(ISODate().getTime() - 1000 * 3600 * 24 * 1) 
> date 
ISODate("2017-04-13T17:47:49.666Z") 
> var bound = date.toISOString().replace("T", " ").substr(0, 20).concat("000000") 
> bound 
2017-04-13 17:47:49.000000 

db.getCollection('reminders').find({ 
    "times": { $elemMatch: { "date": {$gte: bound} } } 
})