我知道我无法锁定单个 mongodb 文档,实际上也没有办法锁定集合。
但是,我遇到了这种情况,我认为我需要某种方法来防止多个线程(或进程,这并不重要)修改文档。这是我的场景。
我有一个包含 A 类型对象的集合。我有一些代码可以检索 A 类型的文档,在数组中添加一个元素,该元素是文档 ( a.arr.add(new Thing()
) 的属性,然后将文档保存回 mongodb。这段代码是并行的,我的应用程序中的多个线程可以执行这些操作,现在没有办法阻止线程在同一个文档上并行执行这些操作。这很糟糕,因为其中一个线程可能会覆盖另一个线程的工作。
我确实使用存储库模式来抽象对 mongodb 集合的访问,因此我只有 CRUD 操作可供我使用。
现在我想起来了,也许这是存储库模式的限制,而不是 mongodb 的限制给我带来了麻烦。无论如何,我怎样才能使这段代码“线程安全”?我想这个问题有一个众所周知的解决方案,但是对于 mongodb 和存储库模式是新手,我不会立即看到它。
谢谢