Mongoose 6发布后,我什么时候还需要使用markModified?

niwlg2el  于 3个月前  发布在  Go
关注(0)|答案(1)|浏览(34)

我正在更新我们的包依赖关系,并从Mongoose 5.x迁移到8.x。在从5迁移到6的文档中,有关于不需要markModified的说明:
Mongoose数组现在是ES6代理。您不再需要在直接设置数组索引后使用markModified()。
来源:https://mongoosejs.com/docs/migrating_to_6.html#arrays-are-proxies
然而,在Mongoose 8的文档中,仍然有对markModified的引用:https://mongoosejs.com/docs/api/document.html#Document.prototype.markModified()
我并不完全清楚哪些场景可以安全地删除markModified,哪些场景不可以。删除所有引用安全吗?或者如果markModified行不再有效,最好保留它们?

omtl5h9j

omtl5h9j1#

这张很模糊我记得是这样的
1.版本密钥仅在数组更改时更新。
1.只有当你使用document.save()的时候,版本密钥才会被更新。像Model.findOneAndUpdate()Model.findByIdAndUpdate()等方法不会在数组改变的时候更新版本密钥。
1.您不需要markModified()。如果您使用以下任一项修改数组字段:

document.arrayField.push('added');
document.arrayField.pull('removed');

字符串
1.如果使用方括号表示法设置数组元素,则确实需要markModified()

document.arrayField[0] = 'something changed';


第4点与v5 -> v6迁移文档所说的相反,但在v7和v8中是正确的。

相关问题