在MongoDB4.0版本之前只支持单文档事务操作,在4.0版本之后开始支持多文档事务操作
image事务和副本集
在MongoDB中多文档事务操作只支持副本集的操作,关于在分片上的事务操作会在4.2版本中引入
存储引擎
在MongoDB中只有 WiredTiger
存储引擎才支持多文档事务操作,在 in-memory
和 MMAPv1
存储引擎
中不支持多文档事务操作
事务和操作
- 事务支持在已经存在的
collections
中进行CURD
操作,collections
可以在不同的数据库中 -
config
和admin
collections和local
数据库中不支持读写事务 -
system.*
collections中也不支持事务 - 事务支持计划查询 如
explain
- 在事务之外创建的
cursors
,在事务中不能进行getMore
操作 - 在事务中创建的
cursors
,在事务外也不能进行getMore
操作
支持多文档事务的操作
Count
操作
为了在事务中使用count
操作,请在 aggregation stage
中使用 count](https://docs.mongodb.com/manual/reference/operator/aggregation/count/#pipe._S_count)或者在 `aggregation stage`中使用 [group使用 $sum操作
信息的操作
查询信息相关的操作 isMaster, buildInfo,connectionStatus和其他相关的辅助方法,都可以在事务中操作,但是这些方法不能作为事务中的第一个操作
限制的操作
下面的操作不能再多文档事务中操作
- 对于影响数据库
catalog
的操作,如对collection
进行创建、删除索引等, listCollections、 listIndexes命令和其他辅助的方法 -
Non-CRUD
和non-information
操作不支持多文档事务,如 createUser getParameter count等相关操作
事务和 mongo
Shell
在 mongo
Shell中的相关的事务方法
原子性
MongoDB
中的多文档事务也是原子性的
事务和锁
默认情况下,事务等待5毫秒以获取事务中操作所需的锁。如果事务不能在5毫秒内获取其所需的锁,则事务中止。
可以使用 maxTransactionLockRequestTimeoutMillis
调整这个时间
网友评论