📅  最后修改于: 2023-12-03 15:42:34.087000             🧑  作者: Mango
在使用 Mongoose 进行数据库操作时,如果修改文档并保存,你会发现默认值没有被更新。这是 Mongoose 特有的一种操作方式,但在某些情况下,这可能会造成混乱。在这篇文章中,我们将探讨这种默认值不更新的行为,以及如何解决它。
Mongoose 具有功能强大的模型默认值机制,该机制允许你为模型中的每个字段设置默认值。当你更新文档时,如果字段没有被更新,则会使用默认值。但是,如果字段值已经被更新为与默认值相同的值,则默认值将被忽略。
这种默认值不更新的行为是出于性能方面考虑。在某些情况下,更新默认值可能会导致与数据库的不必要通信。因此,Mongoose 将默认值的更新限制在必要时才进行。
虽然默认值不更新的行为在某些情况下非常有用,但在其他情况下却会导致混乱。如果你确信要强制更新默认值,可以将 strict
选项设置为 false,并设置 runValidators
选项,以确保更新值与模型定义的类型匹配。以下是示例代码:
myModel.schema.set('strict', false);
myModel.update({ _id: myDocument._id }, { $set: { myKey: undefined } }, { runValidators: true });
在此代码中,先将 strict
选项设置为 false,以允许更新默认值。然后,执行 update 操作时,将要更新的值设置为 undefined,以强制默认值更新。最后,启用 runValidators
选项以确保更新的值与模型定义的类型匹配。
值得注意的是,强制更新默认值可能会导致与数据库的不必要通信,因此你应该在确保必要时才使用此功能。
默认值不更新是 Mongoose 的特殊行为,可以通过设置 strict
选项为 false 并设置 runValidators
选项来强制更新默认值。但是,强制更新默认值可能会导致与数据库的不必要通信,因此你应该在必要时才使用此功能。