MongoDB Multi-DOCUMENT Transactions 实战讲解

阅读时长 4 分钟读完

虽然 MongoDB 4.0 版本在2018年就发布了多文档事务的支持,但是它在关系型数据库中实现事务的传统概念还是具有很大的差别。所以,很多 MongoDB 的用户仍然不知道如何在自己的应用程序中使用这个功能,或者说不确定多文档事务支持是否真的能够满足他们的需求。

在本文中,我们将会讲解 MongoDB Multi-DOCUMENT Transactions 实战经验,并且会使用示例代码来展示如何在实际应用程序中使用多文档事务。

多文档事务一些需要注意的事项

在介绍 MongoDB Multi-DOCUMENT Transactions 的具体实践之前,我们先来看看使用事务时需要注意的一些事项:

  • MongoDB 只支持对相同的数据库执行多文档事务。事务不能跨越多个数据库。
  • MongoDB 的最低要求为 4.0 版本,并且需要使用副本集模式。
  • 使用交互式式 MongoDB shell 进行多文档事务操作时,需要使用 session 对象,而不是普通的 MongoDB 驱动程序。

有了以上的注意事项之后,让我们来看具体的实践经验。

事务支持的操作

在 MongoDB 中,多文档事务操作支持以下的操作类型:

  • 插入(insert)
  • 更新(update)
  • 删除(delete)

隐式和显式会话

在实际应用程序中,我们可以使用隐式和显式两种不同的会话来执行多文档事务操作。

  • 隐式会话:这种情况下,事务会自动提交或回滚。这种模式适用于需要执行独立事务的场景。
  • 显式会话:这种情况下,我们需要手动提交或者回滚一个事务。

在下面的经验分享中,我们将会使用显式会话。

为什么要使用事务

在了解了多文档事务支持的操作类型和会话类型之后,我们先了解一下为什么我们需要使用事务。

事务的主要目的是让一组相关的操作成为一个原子操作(整体完整的操作)。如果事务中的一个操作失败了,整个事务都将回滚到起点,这样应用程序就可以处理所有失败情况,确保数据的完整性。

多文档事务实战经验

在本节中,我们将会给出多文档事务的实战经验和示例代码,帮助您更好的学习和理解多文档事务的使用方法。

在本文中,我们将使用以下的一个简单的应用程序来演示多文档事务的使用:

  • 系统中有两个集合,一个存储用户信息,另一个存储订单信息。
  • 应用程序遇到一个拥有用户信息和订单信息的请求。
  • 应用程序必须首先创建一个新的用户,并将这个用户的 ID 添加到订单的记录中。
  • 如果所有操作都成功,事务将被提交,否则将回滚。

使用事务实现这个应用程序的代码如下所示:

-- -------------------- ---- -------
----- ------- - ----------------------

--- -
    ----- ----------------------------- -- -- -
        ----- ------- - ----- ------
            -----------
            --------------------
            -----------
                - ----- ------- -------- ---- -------- ------ --------- -- 
                - ------- -
            --
 
        ----- ------- - ----- ------
            -----------
            ---------------------
            -----------
                - -------- ------------------- ------- --- -- 
                - ------- -
            --
    ---
- ----- ------- -
    -------------------
-

在这段代码中,我们使用了 startSession() 方法来创建了一个事务会话。然后,我们使用了 withTransaction() 方法来执行这一系列相关操作。这个方法允许我们执行多个数据库操作,并确保这些操作要么全部成功、要么全部回滚。

在第一个操作中,我们插入了一个新的用户记录,并且将这个新的记录的 _id 字段的值存储到变量 result1 中。

然后,在第二个操作中,我们插入了一个新的订单,同时将用户的 ID 存储到订单记录中。

如果在任何一个操作中发生了错误,这个事务操作将会被回滚,否则,将会提交整个事务操作。

总结

在本文中,我们讲解了 MongoDB Multi-DOCUMENT Transactions 的使用方法,并通过一个简单的示例程序展示了它的使用。希望这篇文章可以给您提供宝贵的经验和知识,帮助您更好的使用 MongoDB 数据库,构建更加复杂、高效的应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f2f59cf6b2d6eab3c7cc97

纠错
反馈