Mongodb 在Mongoose对象上创建锁

Mongodb 在Mongoose对象上创建锁,mongodb,mongoose,locking,Mongodb,Mongoose,Locking,我有两个回调,它们经常使用mongoose修改同一个mongo对象。修改非常复杂,我无法在一次update()中轻松完成。结果,很多时候,两个更新中只有一个被应用,我得到一个[VersionError:找不到匹配的文档。]错误 是否有任何方法可以显式锁定文档,以便每次更新都可以等待其他更新完成,并且可以在不担心竞争条件的情况下进行?Mongodb不支持对象锁定,但是您可以自己实现它 你必须做出选择 乐观并发控制(当资源争用较低时)-这可以使用versionNumber或timeStamp字段轻

我有两个回调,它们经常使用mongoose修改同一个mongo对象。修改非常复杂,我无法在一次
update()
中轻松完成。结果,很多时候,两个更新中只有一个被应用,我得到一个
[VersionError:找不到匹配的文档。]
错误


是否有任何方法可以显式锁定文档,以便每次更新都可以等待其他更新完成,并且可以在不担心竞争条件的情况下进行?

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

你必须做出选择

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

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


如果您决定遵循第二个选项,则它涵盖了在“单一”操作中更新数字对象时的情况,尽管在架构上使用
findanddupdate
,而不是
doc.save()
问题是每次我都对对象执行多个操作,这些操作不能用单个
find和modify来封装。我了解到,对单个文档的操作总是原子的。当数据分布在分片的mongo集群之间时,您能想象一下什么情况吗?这在那里又如何适用呢。