【发布时间】:2018-04-19 16:21:29
【问题描述】:
我对 MongoDB 更新的工作方式感到困惑。
在以下文档中:https://docs.mongodb.com/manual/core/write-operations-atomicity/ 说:
在 MongoDB 中,写入操作在单个级别上是原子的 文档,即使操作修改了多个嵌入文档 在单个文档中。
当单个写入操作修改多个文档时, 每个文档的修改是原子的,但操作是一个整体 不是原子的,其他操作可能会交错。
我猜这意味着:如果我要更新文档的所有字段,我将无法看到部分更新:
- 如果我在更新之前获得该文档,我将看到它没有任何变化
- 如果我在更新后获得该文档,我将看到它的所有更改
对于多个元素,每个文档都会发生相同的行为。我想我们可以说每个文档更新都有一个事务,而不是所有文档更新的一个大事务。
但是假设有很多关于多次更新的文档,并且需要一段时间来更新所有这些文档。更新期间其他线程的查询会发生什么?
- 他们会看到旧版本吗?或者他们会在更新完成之前被阻止?
- 在这次大更新期间是否可以对相同文档进行其他更新?如果是这样,此中间更新是否会从大更新中排除某些文档?
【问题讨论】:
标签: mongodb