在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
操作
支持多文档事务的操作
方法 | 命令 | 备注 |
---|---|---|
db.collection.aggregate() | aggregate | 不包含: 公式输入有误currentOp 公式输入有误listLocalSessions 公式输入有误out |
db.collection.distinct() | distinct | |
db.collection.find() | find | |
geoSearch | ||
db.collection.deleteMany() db.collection.deleteOne() db.collection.remove() | delete | |
db.collection.findOneAndDelete() db.collection.findOneAndReplace() db.collection.findOneAndUpdate() | findAndModify | 对于upsert ,只对已经存在的 collection 有效 |
db.collection.insertMany() db.collection.insertOne() db.collection.insert() | insert | 对 已经存在的collection 有效 |
db.collection.save() | 如果是 insert 操作,只有 collection 存在时才有效 | |
db.collection.updateOne() db.collection.updateMany() db.collection.replaceOne() db.collection.update() | update | 对 upsert , 只对已经存在的 collection 有效 |
db.collection.bulkWrite() | 对于upsert ,只对已经存在的 collection 有效 如果是 insert 操作,只有 collection 存在时才有效 |
Count
操作
为了在事务中使用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
调整这个时间
作者:CoderMiner
链接:https://www.jianshu.com/p/1ba94f83369f
共同学习,写下你的评论
评论加载中...
作者其他优质文章