1. 程式人生 > 其它 >Node.js操作MongoDB根據日期Date查詢資料

Node.js操作MongoDB根據日期Date查詢資料

背景

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型別資料比較,並且要注意所在時區是否需要調整“小時”