我有两个回调,它们经常使用 mongoose 修改同一个 mongo 对象。修改很复杂,以至于我无法在一次 update()
中轻松完成。结果,很多时候只应用了两个更新中的一个,我得到了一个 [VersionError: No matching document found.]
错误。
有没有什么方法可以显式锁定文档,以便每个更新都可以等待另一个完成,并且可以在不担心竞争条件的情况下发生?
最佳答案
Mongodb 不支持对象锁定,但是您可以自己实现。
你必须做出选择
乐观的并发控制(当资源争用较少时)- 这可以使用 versionNumber 或 timeStamp 字段轻松实现。在读取时,您检索 versionNo/timeStamp 并将其提供给检查它的所有更新,如果匹配递增。
悲观的并发控制(当单个文档被频繁更新时)——这是一个有问题的技术,因为当您的操作没有成功完成时,您必须涵盖从各种故障场景中恢复。 (即工艺模具)
如果您决定采用第二个选项 here is interesting read它涵盖了在“单个”操作中更新数字对象的情况
关于mongodb - 在 Mongoose 对象上创建锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28440198/