【问题标题】:Update document inside array of objects in mongoose更新猫鼬对象数组中的文档
【发布时间】:2022-08-18 17:43:28
【问题描述】:

我需要更新数组中的对象,所以我正在尝试,但出现以下错误:

error 在 findAndModify 期间计划执行程序错误 :: 由 :: The 位置运算符未从查询中找到所需的匹配项。

这是我的代码:

        const payment = await Purchase.findByIdAndUpdate( 
        { \'_id\': req.body.id, \'payments._id\': req.body.paymentId },
        {
          $set: {
            \'payments.$.status\': false
          }
        }
        ,{ new: true });

模型上的付款对象:

 payments: [
    {
      createdBy: [Object],
      createdAt: \'08/13/22\',
      paymentNumber: 0,
      previousBalance: 3747.68,
      paymentAmount: 3747.68,
      outstandingBalance: 0,
      status: true,
      _id: new ObjectId(\"62f83f3c22e4f67dde8cb85a\"),
      lastModificationBy: [],
      disabledBy: []
    }
  ]

    标签: node.js express mongoose


    【解决方案1】:

    使用 findByIdAndUpdate 时,您只需要传递要更新的文档的 id。

    const payment = await Purchase.findByIdAndUpdate(req.body.paymentId,{status:false},{new:true} )
    

    【讨论】:

      【解决方案2】:

      对于使用findByIdAndUpdate,您需要添加此runValidators

      const payment = await Purchase.findByIdAndUpdate(req.params.id, 
        'payments.$.status': false
      }, {runValidators: true}
      

      虽然同样的更新也可以通过这个来完成

      const payment = await Purchase.findByIdAndUpdate(
        req.body.paymentId,
        {
          status:false
        }, {
          new:true
        }
      )
      

      【讨论】:

        猜你喜欢
        • 2020-07-31
        • 2021-06-30
        • 2012-02-15
        • 2015-04-21
        • 1970-01-01
        • 2017-05-26
        • 2020-08-08
        • 2020-08-05
        • 2015-06-03
        相关资源
        最近更新 更多