在Mongoose对象上创建锁定

时间:2015-02-10 19:28:46

标签: mongodb mongoose locking

我有两个回调通常用mongoose修改同一个mongo对象。修改很复杂,以至于我无法在一个update()中轻松完成修改。因此,很多时候只应用了两个更新中的一个,并且出现[VersionError: No matching document found.]错误。

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

1 个答案:

答案 0 :(得分:1)

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

你必须选择

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

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

如果您决定关注第二个选项here is interesting read,它将涵盖您在“单个”操作中更新数字对象的情况,但