使用 nodejs 和 mongodb 的原子事务



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

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

1(查询集合并从文档中获取字段,例如版本。

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

3(在具有新数据的集合中插入新文档,版本=版本+1

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

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

MongoDB不允许在事务中使用DDL:

事务中不允许以下操作:

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

您可以:

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

随后,若要查询,需要从版本获取 ObjectId,然后按 ObjectId 进行查询。

此实现中不需要任何事务。

最新更新