在MongoDB中使用事务主要有以下几个步骤:
1、 MongoDB支持多文档事务,需要使用客户端版本>=3.6.0。
- 老版本的MongoDB仅支持单文档事务,新版本通过多文档事务功能实现真正的分布式事务。
2、 事务仅支持副本集,且必须只在主节点上执行。
- 这是因为事务需要保证隔离性,只有主节点的数据才是最新的和准确的。
3、 使用传入的session对象启动一个事务。
- 可以通过调用session.startTransaction()方法启动一个事务。
session = client.start_session()
session.start_transaction()
4、 在事务内执行多个操作,要么全部成功要么全部失败。
- 如果任意操作失败,可以调用session.abortTransaction()回滚事务。
try:
collection.insert_one(doc1, session=session)
collection.insert_one(doc2, session=session)
except Exception:
session.abort_transaction()
5、 通过调用session.commitTransaction()提交事务。
- 这会提交事务内的所有操作,并结束当前事务。
session.commit_transaction()
6、 事务支持隔离级别串行化(serializable)。
- 这是最高的隔离级别,可以防止各种并发问题。
7、 事务允许操作包括:
- 插入、更新、删除
- db.collection.findAndModify()
- db.collection.updateMany()
- db.collection.deleteMany()
- db.collection.bulkWrite()
8、 事务不支持的操作包括:
- 读取(find)操作
- 索引和集合创建或删除
- 登录和权限修改