📌  相关文章
📜  默认值不适用于 findoneandupdate mongoose - Javascript (1)

📅  最后修改于: 2023-12-03 15:42:34.097000             🧑  作者: Mango

问题:默认值不适用于 findOneAndUpdate mongoose

在使用 findOneAndUpdate 方法进行更新操作时,可能会遇到默认值不生效的情况。这是因为 findOneAndUpdate 方法默认使用 MongoDB 的原子操作,该操作并不会触发 Mongoose 的校验和默认值设置。

解决方案

要解决此问题,需要在更新操作中加入一个选项 { new: true, runValidators: true }。其中 new 选项表示返回更新后的文档,runValidators 则是表示执行校验。

以下是一个例子,演示如何在更新操作中使用默认值:

const Car = require('./car.model');

async function updateCar(req, res, next) {
  try {
    const { id, make, model } = req.body;
    const updatedCar = await Car.findOneAndUpdate(
      { _id: id },
      { make, model },
      { new: true, runValidators: true, useFindAndModify: false }
    );
    res.send(updatedCar);
  } catch (err) {
    next(err);
  }
}

在上面的例子中,我们将 newrunValidators 选项传递给 findOneAndUpdate 方法。此外,我们还传递了一个 useFindAndModify 选项来避免 Mongoose 弃用警告。

结论

当使用 findOneAndUpdate 方法进行更新操作时,默认值可能不会生效。为了使默认值工作,需要在更新操作中加入 newrunValidators 选项,并保证使用了适当的参数。