commitTransaction
定义
commitTransaction
保存在多文档事务中进行的操作所做的更改并结束事务。
提示
在
mongosh
中,此命令也可以通过Session.commitTransaction()
和Session.withTransaction()
辅助方法运行.辅助方法对
mongosh
用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。在不需要方便或需要额外的返回字段的情况下,请使用数据库命令。要运行
commitTransaction
,必须在admin
数据库上运行此命令,并在Session()
中运行。
兼容性
此命令可在以下环境中部署的以下环境中使用
MongoDB Atlas:MongoDB在云中的全面管理服务
注意
此命令支持所有MongoDB Atlas集群。有关Atlas对所有命令的支持信息,请参阅不受支持的命令。
MongoDB Enterprise:基于订阅的自管理版本的MongoDB
MongoDB Community:开源、免费使用和自管理的MongoDB版本
语法
该命令具有以下语法
db.adminCommand( { commitTransaction: 1, txnNumber: <long>, writeConcern: <document>, autocommit: false, comment: <any> } )
行为
写入关注
在提交事务时,会话使用在事务开始时指定的写入关注。请参阅Session.startTransaction()
。
如果您使用"w: 1"
写入关注提交,则事务可能会在故障转移时回滚。
原子性
当事务提交时,事务中做出的所有数据更改都将被保存并在事务外部可见。也就是说,事务不会提交其中的一些更改同时回滚其他更改。
然而,在事务提交之前,事务中做出的数据更改在事务外部是不可见的。
但是,当事务写入多个分片时,并非所有外部读取操作都需要等待已提交的事务结果在分片之间可见。例如,如果事务已提交且写入1在分片A上可见,但写入2在分片B上尚未可见,则在读取关注"local"
的外部读取可以读取写入1的结果而看不到写入2。