MongoDB:快照读取问题不会锁定读取的文档

时间:2020-09-11 13:04:47

标签: mongodb mongodb-query

首先,我与分片和群集以及副本集节点无关…… 我的用例是mongo db的单个实例,其中设置了1个节点副本,仅用于启用事务

所以我正在开始有关快照的事务。 Mongo为我冻结了世界,并为我提供了一个与之共事的世界的快照。 然后我找到(阅读,查询)一些文档,并根据其结果更新其他文档。 我拥有对我初次阅读的文档的所有权利,如果我自己自己未曾触摸过它们,而我仅使用它们来判断某事,那么它将保持不变。尽管mongo db会检查那些文档,要在更新之前立即进行更新,以查看是否没有其他人触摸过它们,我还需要它来检查那些我只读过但未更新的文档是否保持不变。

但不是。它仅检查要更新的文档。

所以说我设计的域很差,为了让某人减少某些东西,我首先检查该人是否有权这样做。因此,我开始交易,并检查该人是否有权这样做,然后我允许他更新另一个文档并递减一些费用。但是在我进行交易之前和之后,其他一些交易在第一次未提交时取消了该人的资格交易递减,第一笔交易愉快地进行,并且在不知道自己被取消资格的情况下提交了交易。

长话短说:我想让mongo锁定我已阅读的文档或检查我已阅读的文档是否保持不变

1 个答案:

答案 0 :(得分:0)

快照读取关注点(通常是MVCC的实现)是一种并发机制,而不是锁定机制。您遇到的行为是预期的。

如果要锁定,则需要实现锁定。您可以使用唯一索引,条件更新或其他机制来锁定。