如何处理MongoDB写入错误(由于 Mongo连接丢弃)?因为我必须对多个文档进行更新,所以基本上它需要是事务性的,“什么都不是”方法。我以为我可以捕获错误并在其中一个更新失败时还原插入的数据。但是如果MongoDB连接丢失,它会被应用程序的“ uncaughtException ”直接捕获。那么我该如何处理这种情况呢?我需要的是多文档更新中的“Nothing or All”。
答案 0 :(得分:0)
MongoDB中不存在交易。有一些解决方法,例如the one @Alex-Blex posted in the comments,您可以在其中进行两阶段提交以逐步执行更新。 (这有点用词不当;他们的例子有七个db操作。)
如果MongoDB连接断开,它会被" uncaughtException"直接捕获。申请
您可以通过disconnected
和error
事件连接来监听此事:
mongoose.connection.on("disconnected", function () {
// Lost connection to database
});
mongoose.connection.on("reconnected", ...);
通常这些听众都是应用程序范围的,但我想你可以在你的"事务"的生命周期中设置一个。您必须等待reconnected
,然后重试/恢复您的数据库操作。在任何情况下,您仍然会依赖您的申请,以便在整个交易期间因任何原因而崩溃。"
如果您需要交易可靠,可能需要查看另一个数据库。