commitTransaction
定義
commitTransaction
操作によって行われた変更をマルチドキュメントトランザクションに保存し、トランザクションを終了します。
Tip
mongosh
では、このコマンドはSession.commitTransaction()
およびSession.withTransaction()
ヘルパー メソッドを通じて実行することもできます。ヘルパー メソッドは
mongosh
ユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。commitTransaction
を実行するには、コマンドをadmin
データベースに対して実行し、Session()
内で実行する必要があります。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、 「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
このコマンドの構文は、次のとおりです。
{ commitTransaction: 1, txnNumber: <long>, writeConcern: <document>, autocommit: false, comment: <any> }
動作
書込み保証 (write concern)
トランザクションをコミットする際、セッションはトランザクションの開始時に指定された書込み保証( write concern )を使用します。 詳しくはSession.startTransaction()
を参照してください。
"w: 1"
書込み保証 (write concern) を使用してコミットする場合、フェイルオーバーが発生した場合にトランザクションはロールバックされる可能性があります。
アトミック性
トランザクションがコミットされると、トランザクションで行われたデータ変更はトランザクションの外部に保存、表示されます。つまり、トランザクションが他の変更をロールバックしながら、一部の変更をコミットすることはありません。
トランザクションがコミットされるまで、トランザクションで行われたデータ変更はトランザクションの外部には表示されません。
ただし、トランザクションが複数のシャードに書き込む場合、すべての外部読み取り操作が、コミットされたトランザクションの結果がシャード全体で表示されるまで待機する必要はありません。たとえば、トランザクションがコミットされ、書込み 1 がシャード A で表示されているものの、書込み 2 がシャード B にまだ表示されていない場合、読み取り保証(read concern) "local"
での外部読み取りは、書き込み 2 を見ることなく書き込み 1 の結果を読み取ることができます。