适用对象: MongoDB
本文将创建一个 Mongo shell 应用,该应用在 Azure Cosmos DB for MongoDB(服务器版本 4.0)中对固定集合上执行多文档事务。
什么是多文档事务?
在 Azure Cosmos DB for MongoDB 中,对单个文档执行的操作是原子操作。 多文档事务使应用程序可以跨多个文档执行原子操作。 它为操作提供“全或无”语义。 提交时,会保留事务内所做的更改,如果事务失败,则会放弃事务中的所有更改。
多文档事务遵循 ACID 语义:
- 原子性:将所有操作视为一个操作
- 一致性:提交的数据有效
- 隔离:与其他操作隔离
- 持续性:客户端按指示保留事务数据
要求
版本 4.0 的 API 中的未分片集合支持多文档事务。 版本 4.0 中的跨集合或分片集合不支持多文档事务。 事务超时固定为 5 秒。
支持线路协议版本 4.0 或更高版本的所有驱动程序都会支持 Azure Cosmos DB for MongoDB 多文档事务。
在 MongoDB shell 中运行多文档事务
注意
此示例不适用于 MongoDB 指南针中嵌入的 MongoSH beta (shell)。
打开命令提示符,转到安装了 Mongo shell 版本 4.0 和更高版本的目录:
cd <path_to_mongo_shell_>
创建 mongo shell 脚本 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 门户中找到主机、端口、用户和密钥。
mongo "<HOST>:<PORT>" -u "<USER>" -p "KEY" --ssl connect_friends.js
后续步骤
探索 Azure Cosmos DB for MongoDB 4.0 中的新增功能