Locking a document in MongoDB

Jam*_*urt 2 mongodb pymongo

I'm using pymongo in a web app, and want to do something of the form:

doc = collection.find(document)
doc.array1.append('foo')
for(y in doc.array2): <do things with y>
doc.array2 = filter(lambda x: ..., doc.array2)
doc.x = len(doc.array2)
collection.save(doc)
Run Code Online (Sandbox Code Playgroud)

有没有什么简单的方法可以处理处理同一文档的多个请求,并防止一个请求破坏另一个请求的结果/因为它正在编辑过时的版本而使其无效?

jdi*_*jdi 6

查看 mongodb 文档中关于原子操作的部分

您可能感兴趣的部分是关于更新的部分,如果它仍然是最新的。

  1. 取对象。
  2. 在本地修改对象。
  3. 发送更新请求,内容为“如果对象仍与其旧值匹配,则将其更新为该新值”。

如果操作失败,我们可能想从第 1 步开始重试。

当您有许多操作要执行并且您希望避免在数据库上持有锁时,这是一种方法。他们还在该文档中说明了他们通常如何反对持有锁。