import {Lock} from "../models/Lock.js";
export const USERS_COLLECTION= 'users';
export const lock = async (req, res, next) => {
const {isLocked} = await Lock.findById(USERS_COLLECTION);
if (isLocked) {
return res.status(409).send('operation not available for possible
conflict states, retry in a few seconds'); }
next();
}
4条答案
按热度按时间ql3eal8s1#
MongoDB已经实现了一个writergreedy数据库级锁。
这意味着当特定文档被写入时:
User
集合将被锁定无法读取的原因是MongoDB无法在写入时进行一致的读取(该死的物理,你又赢了)。
值得注意的是,如果您想要一个更复杂的锁,跨越多行,那么MongoDB中将不提供这种锁,并且没有实现这种锁的真实的方法。
b1zrtrql2#
MongoDB锁已经为您做到了这一点。看看哪些操作获取了哪些锁,每个锁意味着什么。
67up9zun3#
请参阅MongoDB文档中关于写操作的部分,特别注意这一节:
隔离写操作
对单个文档的修改总是原子的,即使写操作修改了该文档中的多个子文档。对于修改多个文档的写操作,该操作作为一个整体不是原子的,其他操作可以交叉进行。
没有其他操作是原子的。但是,您可以尝试使用隔离操作符隔离影响多个文档的写操作。
要将写操作序列与其他读写操作隔离,请参阅执行〉两阶段提交。
3hvapo4f4#
我读了mongo的文档,但我找不到任何容易使用和维护我的项目,所以我得到了这个想法,实际上是工作得很好,它是超级简单,易于使用。