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