Docs Menu

Docs HomeGo

トランザクション

項目一覧

  • Overview
  • メソッド
  • 詳細情報
  • API ドキュメント

このガイドでは、MongoDB Go Driver でトランザクションを使用する方法を学習できます。 トランザクションを使用すると、トランザクションがコミットされるまでデータを変更しない一連の操作を実行できます。 トランザクション内のいずれかの操作が失敗した場合、ドライバーはトランザクションを中止し、変更が反映される前にすべてのデータ変更を破棄します。

MongoDB では、トランザクションは論理セッション内で実行されます。 セッションは 、順番に実行されるよう関連付けられた読み取り操作または書き込み操作のグループです。 セッションにより、一連の操作に対する 因果整合性 が有効になる、または ACID transaction 内で操作を実行できるようになります 。MongoDBは、トランザクション操作で予期せぬエラーが発生した場合でも、その操作に関係するデータが のままであることを保証します。

Go ドライバーを使用すると、 ClientインスタンスからSession型の新しいセッションを作成できます。

警告

Sessionは、それを作成したClient (または関連付けられたDatabaseまたはCollection )でのみ使用する必要があります。 Sessionと別のClientを使用すると、操作エラーが発生します。

StartSession()メソッドを使用してセッションを開始した後、 Sessionインターフェースが提供するメソッドセットを使用してセッション状態を変更できます。 次の表では、これらの方法について説明します。

方式
説明
StartTransaction()
Starts a new transaction, configured with the given options, on this session. Returns an error if there is already a transaction in progress for the session. For more information, see the manual entry.

Parameter: TransactionOptions
Return Type: error
AbortTransaction()
Aborts the active transaction for this session. Returns an error if there is no active transaction for the session or the transaction has been committed or aborted. For more information, see the manual entry.

Parameter: Context
Return Type: error
CommitTransaction()
Commits the active transaction for this session. Returns an error if there is no active transaction for the session or the transaction has been aborted. For more information, see the manual entry.

Parameter: Context
Return Type: error
WithTransaction()
Starts a transaction on this session and runs the fn callback.

Parameters: Context, fn func(ctx SessionContext), TransactionOptions
Return Type: interface{}, error
EndSession()
Aborts any existing transactions and closes the session.

Parameter: Context
Return Type: none

Sessionインターフェースには、セッション プロパティを取得し、可変セッション プロパティを変更するメソッドもあります。 詳しくは、 API ドキュメント を参照してください。

次の例は、以下の手順でセッションを作成し、トランザクションを作成し、複数のドキュメント挿入操作をコミットする方法を示しています。

  1. StartSession() メソッドを使用してクライアントからセッションを作成します。

  2. トランザクションを開始するには、 WithTransaction() メソッドを使用します。

  3. 複数のドキュメントを挿入します。 WithTransaction()メソッドは挿入を実行し、トランザクションをコミットします。 いずれかの操作でエラーが発生した場合、 WithTransaction()がトランザクションの中止を取り扱います。

  4. EndSession() メソッドを使用してトランザクションとセッションを閉じます。

wc := writeconcern.New(writeconcern.WMajority())
txnOptions := options.Transaction().SetWriteConcern(wc)
session, err := client.StartSession()
if err != nil {
panic(err)
}
defer session.EndSession(context.TODO())
result, err := session.WithTransaction(context.TODO(), func(ctx mongo.SessionContext) (interface{}, error) {
result, err := coll.InsertMany(ctx, []interface{}{
bson.D{{"title", "The Bluest Eye"}, {"author", "Toni Morrison"}},
bson.D{{"title", "Sula"}, {"author", "Toni Morrison"}},
bson.D{{"title", "Song of Solomon"}, {"author", "Toni Morrison"}},
})
return result, err
}, txnOptions)

トランザクションをさらに制御する必要がある場合は、 完全なサンプルコード を使った、トランザクションの手動作成、コミット、および中止方法を示す例を参照してください。

挿入操作の詳細については、「ドキュメントの挿入」基本ページを参照してください。

書込み保証 (write concern) の詳細については、「 CRUD 操作の実行変更 」の基礎ページを参照してください。

Go Driver でセッションとトランザクションを使用する追加の例については、 マルチドキュメント ACID トランザクション に関する開発者ブログ記事を参照してください。

このガイドで説明した型やメソッドの詳細については、次の API ドキュメントを参照してください。

←  Indexes照合 →
フィードバックを送る
© 2022 MongoDB, Inc.

会社概要

© 2022 MongoDB, Inc.