適用対象: MongoDB
この記事では、サーバー バージョン 4.0 の Azure Cosmos DB for MongoDB の固定コレクションに対してマルチドキュメント トランザクションを実行する Mongo シェル アプリを作成します。
マルチドキュメント トランザクションとは
Azure Cosmos DB for MongoDB では、1 つのドキュメントに対する操作はアトミックです。 マルチドキュメント トランザクションを使用すると、アプリケーションで複数のドキュメントにまたがるアトミック操作を実行できます。 操作に対する "全か無か" のセマンティクスがもたらされます。 コミット時には、トランザクション内で行われた変更は保持され、トランザクションが失敗した場合はトランザクション内のすべての変更が破棄されます。
マルチドキュメント トランザクションでは ACID セマンティクスに従います。
- 原子性: すべての操作が 1 つとして扱われます
- 一貫性: コミットされたデータは有効です
- 分離性: 他の操作から分離されています
- 持続性: トランザクション データはクライアントから通知されたときに保持されます
要件
API バージョン 4.0 では、シャード化されていないコレクション内でマルチドキュメント トランザクションがサポートされています。 コレクションをまたいだマルチドキュメント トランザクションやシャード化されたコレクションにおけるマルチドキュメント トランザクションは、4.0 ではサポートされません。 トランザクションのタイムアウトは 5 秒に固定されています。
ワイヤ プロトコル バージョン 4.0 以上をサポートするすべてのドライバーで、Azure Cosmos DB for MongoDB のマルチドキュメント トランザクションがサポートされます。
MongoDB シェルでマルチドキュメント トランザクションを実行する
Note
MongoDB Compass に埋め込まれた MongoSH ベータ版 (シェル) では、この例は機能しません。
コマンド プロンプトを開き、Mongo シェル バージョン 4.0 以降がインストールされているディレクトリに移動します。
cd <path_to_mongo_shell_>
Mongo シェル スクリプト connect_friends.js を作成し、次の内容を追加します。
// insert data into friends collection db.getMongo().getDB("users").friends.insert({name:"Tom"}) db.getMongo().getDB("users").friends.insert({name:"Mike"}) // start transaction var session = db.getMongo().startSession(); var friendsCollection = session.getDatabase("users").friends; session.startTransaction(); // operations in transaction try { friendsCollection.updateOne({ name: "Tom" }, { $set: { friendOf: "Mike" } } ); friendsCollection.updateOne({ name: "Mike" }, { $set: { friendOf: "Tom" } } ); } catch (error) { // abort transaction on error session.abortTransaction(); throw error; } // commit transaction session.commitTransaction();
次のコマンドを実行して、マルチドキュメント トランザクションを実行します。 ホスト、ポート、ユーザー、およびキーは Azure portal にあります。
mongo "<HOST>:<PORT>" -u "<USER>" -p "KEY" --ssl connect_friends.js
次のステップ
Azure Cosmos DB for MongoDB 4.0 の新機能を確認する