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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:45:21