为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB 4.0 多文档事务相关

标签:
MongoDB

在MongoDB4.0版本之前只支持单文档事务操作,在4.0版本之后开始支持多文档事务操作

700

image

事务和副本集

在MongoDB中多文档事务操作只支持副本集的操作,关于在分片上的事务操作会在4.2版本中引入

存储引擎

在MongoDB中只有 WiredTiger 存储引擎才支持多文档事务操作,在 in-memoryMMAPv1存储引擎
中不支持多文档事务操作

事务和操作

  • 事务支持在已经存在的collections中进行 CURD 操作,collections可以在不同的数据库中

  • configadmin 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()
updateupsert, 只对已经存在的 collection有效
db.collection.bulkWrite()
对于upsert,只对已经存在的 collection有效
如果是 insert 操作,只有 collection 存在时才有效

Count操作

为了在事务中使用count操作,请在 aggregation stage中使用 公式输入有误group使用 $sum操作

信息的操作

查询信息相关的操作 isMaster, buildInfo,connectionStatus和其他相关的辅助方法,都可以在事务中操作,但是这些方法不能作为事务中的第一个操作

限制的操作

下面的操作不能再多文档事务中操作

事务和 mongo Shell

mongo Shell中的相关的事务方法

原子性

MongoDB中的多文档事务也是原子性的

事务和锁

默认情况下,事务等待5毫秒以获取事务中操作所需的锁。如果事务不能在5毫秒内获取其所需的锁,则事务中止。
可以使用 maxTransactionLockRequestTimeoutMillis
调整这个时间



作者:CoderMiner
链接:https://www.jianshu.com/p/1ba94f83369f

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消