Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在mongo中实现事务回滚?_Node.js_Mongodb_Express_Transactions_Mongoose - Fatal编程技术网

Node.js 如何在mongo中实现事务回滚?

Node.js 如何在mongo中实现事务回滚?,node.js,mongodb,express,transactions,mongoose,Node.js,Mongodb,Express,Transactions,Mongoose,我用猫鼬代替猫鼬 在来自nodejs express服务器的请求和响应中,通常不需要通过mongoose向mongodb查询 在许多情况下,如果在一个事务下成功执行了前几个查询,而其余所有查询都失败,则可能会发生这种情况 现在我需要将我的db状态回滚到db的初始状态 那么,如何在mongodb中高效回滚? 请提供一些合适的参考资料。MongoDB中不支持传统的ACID数据库事务,不管您在上面放了什么。这不是Mongoose或Express.js的问题,而是MongoDB的一个特点 MongoDB

我用猫鼬代替猫鼬

在来自nodejs express服务器的请求和响应中,通常不需要通过mongoose向mongodb查询

在许多情况下,如果在一个事务下成功执行了前几个查询,而其余所有查询都失败,则可能会发生这种情况

现在我需要将我的db状态回滚到db的初始状态

那么,如何在mongodb中高效回滚?
请提供一些合适的参考资料。

MongoDB中不支持传统的ACID数据库事务,不管您在上面放了什么。这不是Mongoose或Express.js的问题,而是MongoDB的一个特点

MongoDB支持原子操作,这意味着保存到集合的操作将保证完全成功或失败,换句话说,您不会对集合中的单个文档进行部分更新。但不支持在单个事务中进行多次更新


浏览mongo教程

下面是我找到的一个用于进行两阶段提交的链接(可能无法保证):


我同意赫克托的看法。如果您需要多个文档事务,那么Mongo可能不适合您。您可以将数据结构嵌入到单个文档中吗?然后,您可以得到您正在寻找的回滚


另一个选择是查看Mongo clone TokuMX,它提供跨多个文档的事务。

有没有办法管理这些多查询事务回滚?如果您真的需要,我建议您重新考虑MongoDB是否适合您的项目。也许您应该使用传统的关系数据库来支持这种开箱即用的功能。如果您想适应MongoDB功能,“补偿”事务通常是一个有用的选项。在这种情况下,它将“撤消”所做的任何更改。查询不会更改文档。您到底想回滚什么?TokuMX事务与切分不兼容。由于MongoDB 4.0.0(和Mongoose 5.2.0)现在支持MongoDB中的事务。