如何在Mongoose中仅为子文档添加时间戳而不为父文档添加?
解决Mongoose仅为子文档添加时间戳的问题
你遇到的问题大概率是代码里的语法错误导致Mongoose解析异常,进而意外给主文档添加了时间戳。修正错误后,就能实现仅子文档带时间戳的需求。
修正后的正确Schema代码
const feedSchema = new mongoose.Schema( { userId: { type: String, required: true, }, feed: [ new mongoose.Schema( { // 子文档字段 }, { _id: false, timestamps: true } // 移除了此处多余的闭合大括号 ), ], }, { _id: false, timestamps: false, // 明确禁用主文档时间戳 versionKey: false, } );
关键说明
- 语法错误修正:你原来的子文档Schema配置末尾多了一个
},这会让Mongoose无法正确识别Schema选项,触发不符合预期的默认行为。修正后,主文档的timestamps: false会被严格执行,不会生成createdAt和updatedAt字段。 - 子文档时间戳生效:子文档配置里的
timestamps: true会自动为feed数组中的每个子文档添加createdAt和updatedAt字段,完全符合你的需求。 - 验证方法:创建并保存文档后,打印文档内容即可验证——主文档仅包含
userId和feed字段,每个子文档则带有对应的时间戳字段。
如果修正后仍有问题,可以排查两点:
- 确认使用的Mongoose版本在v5.10.0及以上,该版本对子文档时间戳的支持更稳定。
- 检查是否存在全局插件或配置覆盖了当前Schema的
timestamps设置,比如全局启用了时间戳相关插件。
内容的提问来源于stack exchange,提问作者ollelloses
相关产品推荐
相关产品推荐

