Node.js操作MongoDB根據日期Date查詢資料
阿新 • • 發佈:2022-11-29
背景
MongoDB裡,日期Date型別資料使用的是ISODate,是GMT(格林尼治標準時)時間,而我們處在東八區(比標準時間多8個小時),所以實際轉換的時候程式裡的時間應該是GMT+8,轉換到MongoDB下的ISODate就是標準的GMT時間
問題&解決
現在的需求是通過Node.js根據某個日期查詢該天的所有資料,這個查詢如果只通過MongoDB寫的話其實不難,類似這樣:
db.getCollection('collectionName').find( {"cur_date": {"$gt":ISODate("2019-05-29 0:0:0.000Z"), "$lt":ISODate("2019-05-30 0:0:0.000Z")} } )
但是,在Node.js裡無法使用ISODate(會報錯:ISODate is no defined),所以不能直接這麼寫,而應該這麼寫(Node.js環境下):
var query = { // 小時設為8是為了解決我們時區比GMT多8個小時 "cur_date":{"$gt":new Date(new Date(dateStr+" 8:00:00").toISOString()), "$lt":new Date(new Date(nextDateStr+" 8:00:00").toISOString())} }; // 再使用mongodb查詢呼叫這個query作為查詢條件 var results = db.collection('collectionName').find(query);
在這裡使用了Date的toISOString轉換成ISODate字串再查詢即可
總結
日期查詢時當mongodb中儲存的是Date類型時,不是簡單的字串比較即可解決的,需要先轉換成mongodb中的ISODate型別資料比較,並且要注意所在時區是否需要調整“小時”