如何在MongoDB中使用事务?

在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)操作
  • 索引和集合创建或删除
  • 登录和权限修改