Mongo 日期查詢
以下介紹三種方法
使用 ISODate 比對
如果有欄位是專門記錄建立時間,且格式使用 ISODate 那麼可以使用。範例:找出建立時間 (created_at) 介於GMT+8 台灣標準時間的 01 月 01 日 00 點到 09 點的訂單編號
1 2 3 4 5 6 7 8 |
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 實例的結果。
1 2 3 4 5 6 7 8 |
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 點的訂單。
1 2 3 4 5 6 7 8 |
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 因此很容易使用。