📅  最后修改于: 2023-12-03 15:42:34.097000             🧑  作者: Mango
在使用 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);
}
}
在上面的例子中,我们将 new
和 runValidators
选项传递给 findOneAndUpdate
方法。此外,我们还传递了一个 useFindAndModify
选项来避免 Mongoose 弃用警告。
当使用 findOneAndUpdate
方法进行更新操作时,默认值可能不会生效。为了使默认值工作,需要在更新操作中加入 new
和 runValidators
选项,并保证使用了适当的参数。