我有两个回调通常用mongoose修改同一个mongo对象。修改很复杂,以至于我无法在一个update()
中轻松完成修改。因此,很多时候只应用了两个更新中的一个,并且出现[VersionError: No matching document found.]
错误。
有没有办法明确锁定文档,以便每个更新可以等待另一个更新完成,并且可以在不担心竞争条件的情况下发生?
答案 0 :(得分:1)
Mongodb不支持对象锁定,但您可以自己实现。
你必须选择
乐观并发控制(当资源争用较少时) - 可以使用versionNumber或timeStamp字段轻松实现。在读取时,您检索versionNo / timeStamp并将其提供给检查它的所有更新以及是否增加匹配。
悲观并发控制(当单个文档经常更新时) - 这是一个更有问题的技术,因为当您的操作未成功完成时,您必须涵盖从各种故障情况中恢复。 (即过程死亡)
如果您决定关注第二个选项here is interesting read,它将涵盖您在“单个”操作中更新数字对象的情况,但