You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose实现文档属性更新时自动更新lastUpdate字段

如何让Mongoose在文档更新时自动更新lastUpdate字段?

当然可以!完全不用再手动在项目各处写lastUpdate: new Date()了,Mongoose提供了两种便捷的方式来实现这个需求:

方法一:使用内置的timestamps选项(推荐)

这是最简单的方案,Mongoose的Schema支持timestamps配置项,可以直接将默认的更新时间字段映射到你现有的lastUpdate字段上:

const yourSchema = new mongoose.Schema({
  // 你的其他业务字段...
  lastUpdate: Date
}, {
  timestamps: {
    createdAt: false, // 如果你不需要自动生成创建时间,可以设为false
    updatedAt: 'lastUpdate' // 把Mongoose默认的updatedAt字段重命名为lastUpdate
  }
});

配置完成后,无论是创建文档还是更新文档(比如save()、findByIdAndUpdate()、updateOne()等操作),Mongoose都会自动把lastUpdate字段设置为当前时间,完全无需手动干预。

方法二:使用预保存/预更新中间件(自定义逻辑场景)

如果你的业务有特殊需求(比如某些更新操作不需要触发时间更新,或者需要额外的判断逻辑),可以用Mongoose的pre中间件来实现:

const yourSchema = new mongoose.Schema({
  lastUpdate: { type: Date, default: Date.now },
  // 其他业务字段...
});

// 处理文档的save操作(包括创建和手动save更新)
yourSchema.pre('save', function(next) {
  this.lastUpdate = new Date();
  next();
});

// 处理updateOne、findByIdAndUpdate、updateMany这类基于查询的更新操作
yourSchema.pre(['updateOne', 'findByIdAndUpdate', 'updateMany'], function(next) {
  this.set({ lastUpdate: new Date() });
  next();
});

这里要注意:

  • pre('save')里的this指向的是文档实例,所以可以直接赋值
  • 对于updateOne这类查询式更新,this指向的是查询对象,所以需要用set()方法来设置字段

内容的提问来源于stack exchange,提问作者Suhail Gulzar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:23:00