首页 > 解决方案 > MongoDB:手动锁定和解锁集合

问题描述

我想执行事务性读取,然后根据结果进行写入。

读取应该排队,直到读取和写入完成并且我手动解锁了集合。

那可能吗?

标签: node.jsmongodbmongoose

解决方案


读取应该排队,直到读取和写入完成并且我手动解锁了集合。

MongoDB Transactions支持手动锁定集合。

您所描述的是一种悲观锁定行为。选择的文档在事务提交或回滚之前被锁定,这可能会导致死锁

MongoDB Transactions 使用Optimistic Locking。这是一种在读取文档时记录内部版本号的策略。当文档被写回时,检查版本是否未被更改(由事务之外的其他进程)。

如果文档的版本与事务开始时记录的版本不同,事务将中止并且可以再次重试(取决于要求)。

另请参阅MongoDB 事务手册以获取更多信息。

附加信息:MongoDB v4+ 中提供了多文档事务。MongoDB v4.0.0-rc0 (Release Candidate) 于 2018 年 5 月 23 日发布。


推荐阅读