commitTransaction

On this page本页内容

Definition定义

commitTransaction

New in version 4.0.在版本4.0中新增

Saves the changes made by the operations in the multi-document transaction and ends the transaction.保存多文档事务中的操作所做的更改并结束事务。

To run the commitTransaction, the command must be run against the admin database and run within a Session(). 要运行commitTransaction,必须对admin数据库运行该命令,并在Session()中运行。Rather than run the commitTransaction command directly, most users should use the driver method or the mongosh Session.commitTransaction() helper.大多数用户应该使用驱动程序方法或mongosh Session.commitTransaction()助手,而不是直接运行commitTransaction命令。

The command has the following syntax:该命令具有以下语法:

{
  commitTransaction: 1,
  txnNumber: <long>,
  writeConcern: <document>,
  autocommit: false,
  comment: <any>
}

Behavior行为

Write Concern写入问题

When committing the transaction, the session uses the write concern specified at the transaction start. 提交事务时,会话使用事务开始时指定的写关注点See Session.startTransaction().请参阅Session.startTransaction()

If you commit using the "w: 1" write concern, your transaction can be rolled back if there is a failover.如果您使用"w: 1"写入问题提交,则在发生故障切换时可以回滚事务

Atomicity原子性

When a transaction commits, all data changes made in the transaction are saved and visible outside the transaction. 当事务提交时,事务中所做的所有数据更改都将保存并在事务外部可见。That is, a transaction will not commit some of its changes while rolling back others.也就是说,一个事务在回滚其他事务时不会提交其某些更改。

Until a transaction commits, the data changes made in the transaction are not visible outside the transaction.在事务提交之前,事务中所做的数据更改在事务外部是不可见的。

However, when a transaction writes to multiple shards, not all outside read operations need to wait for the result of the committed transaction to be visible across the shards. 然而,当事务写入多个分片时,并非所有外部读取操作都需要等待提交事务的结果在分片中可见。For example, if a transaction is committed and write 1 is visible on shard A but write 2 is not yet visible on shard B, an outside read at read concern "local" can read the results of write 1 without seeing write 2.例如,如果提交了一个事务,并且写1在分片a上可见,但写2在分片B上尚不可见,则外部读时关注点"local"可以读取写1的结果,而不会看到写2。

←  abortTransactionendSessions →