如何在每次保存时使用Mongoose模式中的当前date更新属性?
在我的数据库集合中,每当使用当前date时间更新logging时,我想更新一个“lastChanged”字段。 我希望它与mongoose的默认date相同的格式,如:
ISODate("2011-10-06T14: 01: 31.106Z")
任何智慧的话语?
如果你只是想要一个ISOstring使用:
new Date().toISOString()
在几天内,Mongo将发布新的2.6版本(目前您可以下载实验版本2.5.x)。 在许多其他function中,您可以使用$ currentDate ,它将完成您想要的任务:
db.users.update( <criteria>, { $currentDate: { yourField: true}, } )
完成这个的一个方法是使用Mongoose中间件并更新字段预保存。
var mongoose = require('mongoose'); var Schema = mongoose.Schema; //schema var SomethingSchema = new Schema({ text: {type: String}, createdAt: {type: Date, default: Date.now}, updatedAt: {type: Date, default: Date.now} }); //middle ware in serial SomethingSchema.pre('save', function preSave(next){ var something = this; something.updatedAt(Date.now()); next(); });
但是,似乎并不总是调用中间件:
findAndUpdate()的注释
pre
和post
不需要直接在数据库上执行的更新操作,包括Model.update
,.findByIdAndUpdate
,.findOneAndUpdate
,.findOneAndRemove
和.findByIdAndRemove
以利用pre
或post
中间件,您应该find()
该文档,调用init
,validate
,save
或remove
文档上的函数。 见解释 。
更新:看到这个问题“ 添加created_at和updated_at领域mongoose模式 ”