mongodb - 在 Mongoose 对象上创建锁

标签 mongodb mongoose locking

我有两个回调,它们经常使用 mongoose 修改同一个 mongo 对象。修改很复杂,以至于我无法在一次 update() 中轻松完成。结果,很多时候只应用了两个更新中的一个,我得到了一个 [VersionError: No matching document found.] 错误。

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

最佳答案

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

你必须做出选择

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

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

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

关于mongodb - 在 Mongoose 对象上创建锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28440198/

相关文章:

子文档键上的 MongoDB 索引

node.js - Typescript & Mongoose - "this"在实例方法中不可用

node.js - 如何在同一个语句中使用填充和聚合?

sql-server-2005 - 为什么这个 SELECT 语句会在 SQL Server 上锁定?

c# - Mongodb C# 批量更新/替换子集合

node.js - 如何创建列出子文档长度的 Mongoose 虚拟字段?

mongodb - 从 id 删除 PyMongo 中的文档

node.js - Mongoose - 使用 .populate 访问嵌套对象

version-control - 如何在 Subversion 中递归释放锁?

mysql - 如果调用 "SELECT FOR UPDATE"的线程死了会怎样?该行是否永远锁定?