Mongo 日期查詢

以下介紹三種方法

使用 ISODate 比對

如果有欄位是專門記錄建立時間,且格式使用 ISODate 那麼可以使用。範例:找出建立時間 (created_at) 介於GMT+8 台灣標準時間的 01 月 01 日 00 點到 09 點的訂單編號

db.order.find({
    created_at: {
        $gte: ISODate('2022-01-01T00:00:00+08:00'),
        $lte: ISODate('2022-01-01T09:00:00+08:00')
    }
})

運算符號可以參考

  • $gt 大於
  • $gte 大於等於
  • $lte 小於等於
  • $lt 小於
  • $eq 等於
  • 其他運算符號可以參考官方

使用 new Date()

承上述方法,但是透過 Date() 可以稍微容易一點使用,相差不大。方式有這幾種:

  • new Date(“YYYY-mm-dd”) 返回具有指定日期的 ISODate。
  • new Date(“YYYY-mm-ddTHH:MM:ss”) 指定客戶端本地時區的日期時間,並返回具有 UTC 指定日期時間的 ISODate 。
  • new Date(“YYYY-mm-ddTHH:MM:ssZ”) 指定 UTC 日期時間並返回具有 UTC 指定日期時間的 ISODate。
  • new Date(integer) 將日期時間指定為自 UNIX 紀元(1970 年 1 月 1 日)以來的毫秒數,並返回 ISODate 實例的結果。
db.order.find({
    created_at: {
        $gte: new Date("2022-01-01T00:00:00"),
        $lte: new Date("2022-01-01T09:00:00"),
    }
})

使用 _id (ObjectId) 比對

推薦。如果你的 _id 是使用預設的 ObjectId 那麼本身就已經具備時間戳記,可以配合 Date() 使用。例如找出客戶本地端的 01 月 01 日早上 10 點到 11 點的訂單。

db.order.find({ 
    _id: { 
        $gte: ObjectId.fromDate( new Date("2022-01-01T10:00:00") ),
        $lte: ObjectId.fromDate( new Date("2022-01-01T11:00:00") ),
    }
})

參考文章

這個方法推薦,是因為有時候忘記添加 created_at 的時候,就可以直接使用 _id 查找。且 _id 本身已經是具有 index 因此很容易使用。

發表迴響