Mongoose.js 交易

2024-02-27

我知道 MongoDB 不像关系数据库那样支持事务,但我仍然想知道如何实现多个操作的原子性。在网上搜寻,我看到人们提到没有交易的交易 http://www.infoq.com/presentations/Transactions-without-Transactions。通读幻灯片后,我仍然不清楚如何使用 Mongoose.js 来实现这一点。

以这段代码片段为例:

player.save(callback1);
story.save(callback2);

如何实现回调1和回调2以便它们一起成功或一起失败?


如果您确实必须跨多个文档类型(在单独的集合中)进行事务,那么实现此目的的方法是使用一个存储要执行的操作的表。

db.actions.insert(
{ actions: [{collection: 'players', _id: 'p1', update: {$set : {name : 'bob'} } },
            {collection: 'stories', _id: 's1', update: {$set : {location: 'library'} } }], completed: false }, callback);

这个插入是原子的,并且一次性完成。然后,您可以执行“actions”集合中的命令,并将它们标记为完成或在完成时删除它们,并在它们全部完成时调用原始回调。仅当您的操作处理循环是唯一更新数据库时,这才有效。当然,你必须停止使用 mongoose,但越早这样做越好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongoose.js 交易 的相关文章

随机推荐

  • Android 本机代码如何针对多种处理器类型?

    据我了解 Android 上的本机代码是直接与特定设备的处理器一起工作的代码 因此 如果我想利用某个处理器 我会使用本机代码 但是 如果我想制作一个包含本机代码但面向多个处理器的应用程序 会发生什么情况 我是否必须制作多个应用程序 每个架构
  • 如何将图像重置到原始位置

    我正在使用 TouchImageView 类 位于https github com MikeOrtiz TouchImageView https github com MikeOrtiz TouchImageView 我使用这个类对我的图像
  • 指定的容器不存在

    我陷入了这个错误The specified container does not exist 让我解释 CloudBlobClient blobStorage GetBlobStorage upload CloudBlockBlob blo
  • 如何隐藏RCP中的默认菜单?

    我是 Eclipse RCP 插件开发的新手 我用自己的视角编写了一个插件 并在其中添加了视角特定的菜单 我的问题是如何隐藏 Eclipse 中提供的默认菜单 例如 编辑 导航 搜索 项目 我尝试使用 并提出我的观点具体条件 以及菜单贡献
  • 未搜索SBT maven本地存储库

    我想从本地 Maven 存储库加载一些库 我已经配置了 sbt 0 13 plugins plugins sbt resolvers Resolver sonatypeRepo snapshots resolvers Resolver ma
  • Swift - 如何使用 XIB 文件创建自定义 viewForHeaderInSection?

    我可以像下面这样以编程方式创建简单的自定义 viewForHeaderInSection 但我想做更复杂的事情 可能与不同的类连接并像 tableView 单元格一样访问它们的属性 很简单 我想看看我在做什么 func tableView
  • 禁用 WebView 中的可选链接

    我有一个webView包含在一个scrollView 然后一切都包含在一个viewPager 当我跳到下一个视图页面时 页面中间的链接将被聚焦 文本周围以橙色突出显示 这会导致页面跳转到最近的链接 有没有办法禁止链接在触摸时聚焦 我已经尝试
  • 在Excel中计算不同值 - 频率函数

    我的任务是计算 Excel 中某一列中不同字符串的数量 后来快速谷歌搜索发现了以下公式here http office microsoft com en us excel HP030561181033 aspx Count 20the 20
  • 升级编译sdk版本后findViewById出错

    升级后编译SDK版本26 全部findViewById显示错误 没有足够的信息来推断 fun 中的参数 T findViewById id Int T 这是因为从 Android O 开始 我们不需要强制转换它 有几种选择 代替 val t
  • 我可以在同一台计算机上安装两个不同版本的 Visual Studio 吗?

    我可以在同一台计算机上安装 Visual Studio 2005 和 2010 吗 会造成什么问题吗 是的 你可以这样做 我在一台机器上安装了VS 2005 2008和2010 它们都是独立工作的 但是 在此之前 请记住 低版本制作的项目只
  • 如何重定向到 404 上的特定网址

    error 404 def error404 error return Nothing here sorry 这是响应404的方式bottle framework 但是在 404 上我想重定向到特定的 url 说http abc com h
  • 为什么不能创建抽象类的对象?

    这是我脑海中的一个场景 我用谷歌搜索了很多 但得到了像这样的答案 抽象类没有实现方法 所以我们无法创建对象 抽象 一词指示编译器不要创建该类的对象 但是在一个简单的类中 我们拥有所有虚拟方法 能够创建对象 此外 我们可以定义不同的访问权限来
  • 从 HSV 直方图中获取主色值

    我正在根据如下图像创建 HSV 直方图 void processImageWithHsv Mat image Mat image hsv cvtColor image image hsv CV BGR2HSV int hbins 50 sb
  • 如何停止 IIS 要求对本地主机上的默认网站进行身份验证

    我在 Windows XP Pro SP2 上安装了 IIS 5 1 此外 我还安装了带有 NET 3 5 的 VS 2008 Express 显然 IIS 已针对 NET 3 5 自动配置为 ASP NET 问题是每当我访问http lo
  • 如何确保weak_ptr不是从临时的shared_ptr创建的?

    我们来上课吧Foo和方法void use weak ptr std weak ptr
  • ANDROID:无法解析方法 getSupportActionBar()

    这件事让我发疯 我似乎无法让我的应用程序正确编译 我通过复制 jar 文件 将它们放入 libs 文件夹 右键单击并将它们添加为库 在我的应用程序中添加了支持库 我已经尝试扩展 ActionBaractivity 但仍然没有任何方法无法识别
  • 关于 C# 泛型最重要的事情...经验教训 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 删除字符串中 JavaScript 代码中的新行

    我在 javascript 文件的源代码中有一个带有换行符的字符串 如下所示 var str new line 现在我想删除代码中的换行符 我找不到任何关于此的内容 我一直在获取相关内容 n and r 提前致谢 编辑 2021 这个问题是
  • 刚习惯在 OS X 上的 emacs 中进行 paredit - 为什么 C-) 不起作用?

    我最近在 Mac OS X Leopard 中设置了 Common Lisp 编程环境 我发现 paredit 是一个不可或缺的 emacs 模块 Paredit 正在尽力帮助我更轻松地处理我的 Lisp 代码 但我遇到了一些陷阱 C 必然
  • Mongoose.js 交易

    我知道 MongoDB 不像关系数据库那样支持事务 但我仍然想知道如何实现多个操作的原子性 在网上搜寻 我看到人们提到没有交易的交易 http www infoq com presentations Transactions without