Node.js 如果在mongodb中多次更新部分失败,如何回滚?

Node.js 如果在mongodb中多次更新部分失败,如何回滚?,node.js,mongodb,mongojs,Node.js,Mongodb,Mongojs,我知道多重更新不会是原子的,而且在这个过程中更新查询可能会失败。可以通过getLastError找到错误。但是,如果我想回滚在该特定查询中已经完成的更新,该怎么办?有比繁琐的两阶段提交更简单的方法吗 例如,我有一些用户和他们的手机型号的简单集合。现在,我对所有拥有Nexus4到Nexus5的用户进行了多重更新(Dreamy,不是吗?)。唯一的条件是,全部或无-因此,即使有一个N4用户没有得到他的N5,所有N5都将被收回。现在,mongodb不知何故在这两者之间失败了,我被一些N4用户和一些N5用

我知道多重更新不会是原子的,而且在这个过程中更新查询可能会失败。可以通过
getLastError
找到错误。但是,如果我想回滚在该特定查询中已经完成的更新,该怎么办?有比繁琐的两阶段提交更简单的方法吗

例如,我有一些用户和他们的手机型号的简单集合。现在,我对所有拥有Nexus4到Nexus5的用户进行了多重更新(Dreamy,不是吗?)。唯一的条件是,全部或无-因此,即使有一个N4用户没有得到他的N5,所有N5都将被收回。现在,mongodb不知何故在这两者之间失败了,我被一些N4用户和一些N5用户困住了。现在,正如我从网上收集到的,我不能让mongo直接回滚。如果操作失败,我将不得不手动将N5用户更新回N4。如果这也失败了,继续重复。 或者,当我有一个复杂的收集,我将不得不保留一个新的关键,即<代码>状态并使用关键字更新它更新/更新


这是我的理解。我想知道是否有更简单的方法。从评论中我认为答案是否定的。

是的,您必须重新创建事务。MongoDB没有回滚功能。但当你描述你到底想做什么,在什么情况下可能以什么方式失败时,我们也许能够帮助你找到解决办法。我承认这是一个公平的问题。节点中当前没有可帮助您的工具。Mongo的交易就在眼前。但也许你真正的问题与你如何设计你的模式有关。我们现在看不到。或者理解你想做什么。问题编辑是可以的,除非您对这个问题将得出的假设回答感到满意。如果您需要执行事务并按描述回滚,则可能选择了错误的数据库平台。如果您试图自己实现事务系统,那么在事务系统中会有很多复杂的边缘情况,特别是当您需要独立事务时。我通常认为,在完成所有必要的指示当前版本的工作之后,最好使用一个版本为当前版本的新文档来处理这些场景。这意味着复制数据,但通常是有效的。