Mongoose子文档字段timestamp不显示问题求助
解决Mongoose子文档添加后不显示timestamp的问题
问题原因
当你将Product模型实例(newProduct)添加到Cart的子文档数组时,Mongoose仅会复制productSchema中显式定义的字段(name、productID、color、size、_id),不会自动携带原实例的createdAt和updatedAt。即便productSchema设置了timestamps: true,直接推送模型实例也无法触发子文档的时间戳生成逻辑。
解决方案
方案1:推送原始文档数据(保留原Product的时间戳)
使用newProduct._doc获取包含完整字段(含时间戳)的原始文档数据,替代整个模型实例推送到购物车数组中:
修改findOneAndUpdate写法:
Cart.findOneAndUpdate( { _id: newCart._id }, { $push: { product: newProduct._doc } }, // 改用newProduct._doc { new: true } ).exec();
修改unshift+save写法:
newCart.product.unshift(newProduct._doc); await newCart.save(); // 添加await确保保存操作完成
方案2:让子文档生成独立时间戳
若不需要复用原Product的时间戳,希望购物车子文档拥有独立的时间戳,可直接将请求体数据添加到购物车,无需先创建Product实例:
const newCart = await Cart.create({ product: [req.body] });
此时Mongoose会自动为子文档生成createdAt和updatedAt字段。
验证结果
修改后,购物车返回数据将包含子文档的时间戳,符合预期:
{ "product": [ { "name": "pegasus", "productID": "123ghnjmkiii", "color": "black", "size": "xl", "_id": "649cb54a3421423e94b8fbb0", "createdAt": "2023-06-28T22:33:46.424Z", "updatedAt": "2023-06-28T22:33:46.424Z" } ], "_id": "649cb54a3421423e94b8fbaf", "createdAt": "2023-06-28T22:33:46.424Z", "updatedAt": "2023-06-28T22:33:46.424Z", "__v": 0 }
内容的提问来源于stack exchange,提问作者sandy
相关产品推荐
相关产品推荐

