mongoose的date型別和timestamps的使用

劉輝發表於2019-02-16

今天在用mongoose獲取資料時,發現createdAt 和 updatedAt 兩個時間型別的資料一直在變化,數值等於伺服器時間,經過一番排查,終於找到了原因

mongoose的Schema有Date型別,可以設定為updatedAt: { type: Date, default: Date.now },看起來就是設定了一個日期型別,並且預設值為當前時間

其實這個default: Date.now 不能單獨使用,否則根本不會將updatedAt這個欄位儲存到資料庫中,每次拉取資料時,直接去了伺服器當前時間填充這個欄位,因此出現上述的現象

結合 timestamps: { createdAt: `createdAt`, updatedAt: `updatedAt` } 才能達到儲存建立時間和更新時間的目的
參考:http://mongoosejs.com/docs/gu…


但是,已經建立的資料,即使後來新增了timestamps: { createdAt: `createdAt`, updatedAt: `updatedAt` } ,也不會自動更新建立時間和儲存時間兩個欄位。這時,必須手動更新這兩個欄位,保證這兩個欄位都有資料後,開啟timestamps才有效。注意,更新時必須先關閉timestamps選項,否則更新建立時間不會成功!在資料庫檢查兩個欄位都有資料後,再開啟timestamps

相關文章