javascript - 使用 nodejs 和 mongodb 的原子事务
问题描述
我是 MEAN 堆栈的新手。请帮助解决这种情况。
我的函数必须这样做,我想让这个线程安全,即我想在 API 中使用它
1)查询一个集合并从文档中获取一个字段,比如版本。
2)在另一个数据库中删除与此版本和其他字段匹配的另一个文档。
3) 用新数据在集合中插入新文档,版本 = 版本 + 1
这在 C# + Sql 服务器世界中非常简单。
在 node + mongodb 环境中实现这一目标的最佳方法是什么?
解决方案
MongoDB不允许在事务中使用 DDL:
事务中不允许以下操作:
影响数据库目录的操作,例如创建或删除集合或索引。例如,事务不能包含会导致创建新集合的插入操作。
你可以:
- 从集合中检索版本
- 生成用于新数据的 ObjectId
- 插入数据,将其与步骤 2 中生成的 ObjectId 相关联
- 更新步骤 1 中的集合以使版本 = 版本 + 1 并将 ObjectId 设置为在步骤 2 中使用对版本 = 原始版本的条件更新生成的集合;如果更新不匹配任何文档,则从步骤 1 重新开始
- 删除旧数据和孤立数据
随后,要查询,您需要从版本中获取 ObjectId 并通过 ObjectId 查询。
在这个实现中不需要事务。
推荐阅读
- json - 将每个 json 键(具有给定名称)的值存储到 powershell 数组,而不考虑 json 结构
- flutter - 我如何使用一个键来循环存储在我的 sharedpreference 中的数据 - Flutter
- redis - 在 Redis 中删除多个键
- ios - 当应用程序在后台使用 sinch 时 iOS 13 callkit 崩溃
- excel - 从谷歌驱动器上受保护的 PDF 中提取文本
- sql - 从多重循环中插入记录
- sql - Oracle SQL Developer 动态日期表名
- discord.py - 如何制作“自定义配置文件”,用户可以在其中设置自己的状态?不和谐.py
- javascript - Javascript 获取 API 数据并显示每个项目
- javascript - 如何防止用户登录后看到登录页面?