【问题标题】:Mongoose: Losing previously set values from newly created and updated schema documentMongoose:从新创建和更新的模式文档中丢失以前设置的值
【发布时间】:2020-12-19 22:37:04
【问题描述】:

我有一个异步函数,我首先在下面更新一个文档:

  const saveToCurrentOrder= await Order.findByIdAndUpdate(
      customerID,
      {
        orderStatus: "processed",
        categoryID,
        categoryName,
      },
      { new: true }
    );

更新返回的新对象是:

{
  "customerID": "12345",
  "orderStatus": "processed",
   "categoryID": 234,
   "categoryName":"Food"
}

现在我基本上想复制上面的文档,并说要更新新文档的 orderStatus 和 customerID,但保持剩余的设置数据,如 categoryName 和 categoryID 不变。我试图在创建新模式对象时使用扩展运算符来做到这一点,如下所示:

const saveToNextOrder = new Order({
      ...saveToCurrentOrder,
      orderStatus: "pending",
      customerID: "1236"
    });

await saveToNextOrder.save()

这会创建一个新对象,但是新对象会丢失 categoryID 和 categoryName 并且只显示设置的值:

{
customerID: "1236",
orderStatus: "pending"
}

我真的很困惑为什么传播运算符没有按我期望的方式工作。

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    回答here 真的帮助了我。基本上我没有意识到saveToCurrentOrder 是猫鼬类型的对象,与普通的 JS 对象不同。我需要使用toObject 转换它然后传播它。但是,我必须将 _id 指定为 null,以便它自动生成并且不会与来自先前对象的现有 _id 冲突。

    const saveToNextOrder = new Order({
          ...saveToCurrentOrder.toObject(),
          _id: null,
          orderStatus: "pending",
          customerID: "1236"
        });
    
    await saveToNextOrder.save()
    

    【讨论】:

      猜你喜欢
      • 2017-05-19
      • 2017-01-19
      • 2016-01-13
      • 2022-01-15
      • 2019-10-05
      • 1970-01-01
      • 2017-09-24
      • 2015-10-13
      • 2013-08-14
      相关资源
      最近更新 更多