gpt4 book ai didi

node.js - 带有版本号的 Mongoose 乐观并发

转载 作者:IT老高 更新时间:2023-10-28 12:29:35 25 4
gpt4 key购买 nike

有什么方法可以强制 mongoose 在保存时始终验证文档版本?据我所知,默认行为仅在修改文档中的数组时强制执行版本号。更糟糕的是,即使文档版本不匹配,似乎也允许向数组添加元素,因此目前,即使您正在修改数组,也需要替换数组以获取版本检查。 (请注意,我使用的示例使用无模式子文档(简单定义为“{}”),这可能会影响行为)。除了 this article我找不到有关该主题的任何文档。也许有一个插件可以做到这一点?

最佳答案

免责声明:我自己编写了插件,以在我自己的代码中解决这个问题,基于 this issue on GitHub .

这已经晚了,但希望总比没有好。

mongoose-update-if-current插件可能会为您提供您正在寻找的功能。它在使用版本字段对文档调用 .save() 时添加了乐观并发控制。每次保存文档时,它都会增加 __v ,并防止不同的版本相互保存。例如:

// saves with __v = 0
let product = await new Product({ name: 'apple pie' }).save();

// query a copy of the document for later (__v = 0)
let oldProduct = await Product.findById(product._id);

// increments to __v = 1
product.name = 'mince pie';
product = await product.save();

// throws an error due to __v not matching the DB version
oldProduct.name = 'blueberry pie';
oldProduct = await oldProduct.save();

因此,我们现在对 Product 进行了乐观并发控制。

警告:该插件仅在 .save() 中验证版本,而不在 Product.findByIdAndUpdate() 等静态模型方法中验证版本.

关于node.js - 带有版本号的 Mongoose 乐观并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37829219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com