参考 > MongoDB CRUD操作 > MongoDB CRUD概念 > 原子性和交易
在MongoDB中,写操作是对单个文件的能级,即使操作修改多个嵌入式文档 内的单个文件。
当单个写入操作(例如
db.collection.updateMany()
)修改多个文档时,每个文档的修改都是原子的,但整个操作不是原子的。
当执行多文档写操作时,无论是通过单个写操作还是通过多个写操作,其他操作都可能会交错。
对于需要对多个文档(在单个或多个集合中)进行读写原子性的情况,MongoDB支持多文档事务:
有关MongoDB中事务的详细信息,请参阅 事务页面。
重要
在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应代替有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)对于您的数据和用例将继续是最佳的。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档交易的需求。
有关其他事务使用方面的注意事项(例如运行时限制和oplog大小限制),另请参见 生产注意事项。
并发控制允许多个应用程序并发运行,而不会导致数据不一致或冲突。
一种方法是在只能具有唯一值的字段上创建唯一索引。这样可以防止插入或更新创建重复数据。在多个字段上创建唯一索引以强制字段值的组合具有唯一性。有关用例的示例,请参见update()和Unique Index以及findAndModify()和Unique Index。
另一种方法是在查询谓词中为写操作指定字段的期望当前值。
也可以看看