如何在MongoDB文档更新时将createdAt字段设为当前日期?(React+Mongoose)
解决方法:更新MongoDB文档的createdAt字段
问题原因
当Mongoose模型启用{ timestamps: true }时,框架会自动管理createdAt和updatedAt字段:createdAt仅在文档创建时赋值,默认不允许后续更新操作覆盖该字段,所以前端传递的createdAt值会被Mongoose忽略。
方案1:修改Schema允许编辑createdAt
显式在Schema中定义createdAt字段,覆盖默认的只读行为:
const postSchema = new mongoose.Schema({ // 其他现有字段,比如postedBy postedBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User' } }, { timestamps: true, // 显式定义createdAt,允许修改 createdAt: { type: Date, default: Date.now } }); const Post = mongoose.model('Post', postSchema);
修改后,后端的findOneAndUpdate使用$set就能正常更新createdAt字段。
方案2:后端生成日期(推荐)
不要依赖前端时钟,直接在后端生成当前时间,避免客户端时间不一致的问题:
// 前端无需传递createdAt字段 // 后端处理: const updatedData = { ...req.body, createdAt: new Date() // 服务端生成当前时间 }; Post.findOneAndUpdate( { _id: new Types.ObjectId(id), postedBy: user }, { $set: updatedData }, { new: true } );
方案3:临时关闭严格模式(不推荐)
如果不想修改Schema,可以在更新时关闭Mongoose的严格模式,允许写入未在Schema中显式定义的字段(但会绕过验证,风险较高):
Post.findOneAndUpdate( { _id: new Types.ObjectId(id), postedBy: user }, { $set: updatedData }, { new: true, strict: false } );
内容的提问来源于stack exchange,提问作者asela daskon
相关产品推荐
相关产品推荐

