面试题答案
一键面试开启事务的条件
- MongoDB版本:MongoDB 4.0 及以上版本支持多文档事务。
- 存储引擎:必须使用 WiredTiger 存储引擎,从 MongoDB 3.2 版本开始,WiredTiger 是默认存储引擎。
- 部署架构:事务需要在副本集或分片集群环境下运行,单机模式不支持事务。
基本步骤
- 开始事务:在一个会话(session)内开始事务。
- 执行操作:在事务内执行多个数据库操作,如插入、更新、删除等。
- 提交或回滚事务:如果所有操作都成功,提交事务;如果任何操作失败,回滚事务。
Python的pymongo库代码示例
from pymongo import MongoClient
from pymongo.client_session import ClientSession
# 连接MongoDB
client = MongoClient('mongodb://localhost:27017')
db = client['test_database']
collection1 = db['collection1']
collection2 = db['collection2']
with ClientSession(client) as session:
session.start_transaction()
try:
# 第一个集合插入操作
collection1.insert_one({'key': 'value1'}, session=session)
# 第二个集合插入操作
collection2.insert_one({'key': 'value2'}, session=session)
session.commit_transaction()
except Exception as e:
session.abort_transaction()
print(f"事务回滚: {e}")
上述代码首先创建了一个 MongoDB 客户端连接,然后在一个会话(ClientSession
)中开始事务。在事务内,对两个集合分别执行插入操作。如果所有操作都成功,事务提交;如果出现异常,事务回滚。