2017-01-20 57 views
4

我有一個收藏這樣的:Mongodb查詢。如何找到離當前最近的日期?

{ 
    "_id" : ObjectId("963fae9d93f4d930c98e269d"), 
    "myDate":ISODate("2017-02-05T05:00:00.000Z"), 
    "otherData":"blablabla" 
}, 
{ 
    "_id" : ObjectId("963fae9d93f4d930c98e269d"), 
    "myDate":ISODate("2017-02-05T14:00:00.000Z"), 
    "otherData":"blablabla" 
}, 
{ 
    "_id" : ObjectId("963fae9d93f4d930c98e269d"), 
    "myDate":ISODate("2017-03-05T02:00:00.000Z"), 
    "otherData":"blablabla" 
}, 
{ 
    "_id" : ObjectId("963fae9d93f4d930c98e269d"), 
    "myDate":ISODate("2017-03-05T19:00:00.000Z"), 
    "otherData":"blablabla" 
} 

鑑於當前日期(以分和秒),我想找到最接近當前日期的記錄(由「指明MyDate」字段)。

感謝

回答

6

您可以減去您的收藏與當前日期的日期輕鬆搜索,走差異化的絕對值考慮將來的日期,然後使用排序和限制,以獲得最近的文檔:

db.a.aggregate([ 
{ 
    $project : { 
     myDate : 1, 
     otherData : 1, 
     difference : { 
      $abs : { 
       $subtract : [new Date(), "$myDate"] 
      } 
     } 
    } 
}, 
{ 
    $sort : {difference : 1} 
}, 
{ 
    $limit : 1 
} 
]) 

,如果你想在輸出文檔中的difference領域可以使用額外的$project。而不是當前日期,您可以使用任何其他日期並查找該日期的最近日期。

1

每個日期是接近當前的日期,所以你必須要對更具體的,一旦你這樣做,比方說您最近的定義,要麼通過a second(s), minute(s), hour(s) , day(s) or year(s)你該因子添加到當前爲止,現在你已經兩個日期current and current + nearest factor 從那裏,你可以按myDate日期之間,並使用相應

some_collection.find({ 
    myDate: { 
     $gte: ISODate("2016-04-29T00:00:00.000Z"), 
     $lt: ISODate("2017-05-01T00:00:00.000Z") 
    } 
}) 
+1

我想找到最近的日期到當前時刻,所以'最接近'是當前時刻和'myDate'字段之間的最小差異。對不起我的英語不好。 – victorpacheco3107

相關問題