在 Mongoose 对象上创建锁

max*_*o87 6 locking mongoose mongodb

我有两个回调,它们经常用 mongoose 修改同一个 mongo 对象。修改很复杂,以至于我不能轻易地一次完成update()。结果,很多时候只应用了两个更新中的一个,并且出现[VersionError: No matching document found.]错误。

有什么方法可以明确锁定文档,以便每次更新都可以等待另一个完成,并且可以在不担心竞争条件的情况下发生?

mar*_*inn 4

Mongodb不支持对象锁定,但是您可以自己实现。

你必须做出选择

  • 乐观并发控制(当资源争用较低时) - 这可以使用 versionNumber 或 timeStamp 字段轻松实现。在读取时,您检索 versionNo/timeStamp 并将其提供给所有检查的更新以及如果匹配则递增。

  • 悲观并发控制(当单个文档频繁更新时) - 这是一个更有问题的技术,因为当您的操作未成功完成时,您必须涵盖从各种故障场景中恢复的情况。(即进程死亡)

如果您决定遵循第二个选项,这里很有趣,它涵盖了您在“单个”操作中更新数字对象时的情况