首页 > 解决方案 > 使用 nodejs 和 mongodb 的原子事务

问题描述

我是 MEAN 堆栈的新手。请帮助解决这种情况。

我的函数必须这样做,我想让这个线程安全,即我想在 API 中使用它

1)查询一个集合并从文档中获取一个字段,比如版本。

2)在另一个数据库中删除与此版本和其他字段匹配的另一个文档。

3) 用新数据在集合中插入新文档,版本 = 版本 + 1

这在 C# + Sql 服务器世界中非常简单。

在 node + mongodb 环境中实现这一目标的最佳方法是什么?

标签: javascriptnode.jsmongodb

解决方案


MongoDB不允许在事务中使用 DDL

事务中不允许以下操作:

影响数据库目录的操作,例如创建或删除集合或索引。例如,事务不能包含会导致创建新集合的插入操作。

你可以:

  1. 从集合中检索版本
  2. 生成用于新数据的 ObjectId
  3. 插入数据,将其与步骤 2 中生成的 ObjectId 相关联
  4. 更新步骤 1 中的集合以使版本 = 版本 + 1 并将 ObjectId 设置为在步骤 2 中使用对版本 = 原始版本的条件更新生成的集合;如果更新不匹配任何文档,则从步骤 1 重新开始
  5. 删除旧数据和孤立数据

随后,要查询,您需要从版本中获取 ObjectId 并通过 ObjectId 查询。

在这个实现中不需要事务。


推荐阅读