Node.js 如何在mongo中实现事务回滚?
我用猫鼬代替猫鼬 在来自nodejs express服务器的请求和响应中,通常不需要通过mongoose向mongodb查询 在许多情况下,如果在一个事务下成功执行了前几个查询,而其余所有查询都失败,则可能会发生这种情况 现在我需要将我的db状态回滚到db的初始状态 那么,如何在mongodb中高效回滚?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
请提供一些合适的参考资料。MongoDB中不支持传统的ACID数据库事务,不管您在上面放了什么。这不是Mongoose或Express.js的问题,而是MongoDB的一个特点 MongoDB支持原子操作,这意味着保存到集合的操作将保证完全成功或失败,换句话说,您不会对集合中的单个文档进行部分更新。但不支持在单个事务中进行多次更新
浏览mongo教程 下面是我找到的一个用于进行两阶段提交的链接(可能无法保证):
我同意赫克托的看法。如果您需要多个文档事务,那么Mongo可能不适合您。您可以将数据结构嵌入到单个文档中吗?然后,您可以得到您正在寻找的回滚
另一个选择是查看Mongo clone TokuMX,它提供跨多个文档的事务。有没有办法管理这些多查询事务回滚?如果您真的需要,我建议您重新考虑MongoDB是否适合您的项目。也许您应该使用传统的关系数据库来支持这种开箱即用的功能。如果您想适应MongoDB功能,“补偿”事务通常是一个有用的选项。在这种情况下,它将“撤消”所做的任何更改。查询不会更改文档。您到底想回滚什么?TokuMX事务与切分不兼容。由于MongoDB 4.0.0(和Mongoose 5.2.0)现在支持MongoDB中的事务。