Node.js : Как справиться с ошибкой записи MongoDB?

#node.js #mongodb #mongoose #database-connection

#node.js #mongodb #мангуст #подключение к базе данных

Вопрос:

Как обработать ошибку записи MongoDB (из-за разрыва соединения Mongo)? Потому что мне нужно обновлять несколько документов, поэтому в основном это должен быть транзакционный подход «Ничего или все». Я думал, что смогу перехватить ошибку и вернуть вставленные данные, если одно из обновлений не удалось. Но если соединение с MongoDB разорвано, оно напрямую перехватывается «uncaughtException» приложения. Итак, как я могу справиться с этим сценарием? Все, что мне нужно, это «Ничего или все» при обновлении нескольких документов.

Комментарии:

1. В mongodb нет транзакций, но вы можете попробовать 2-фазный подход к фиксации .

Ответ №1:

Транзакции не существуют в MongoDB. Есть несколько обходных путей, таких как тот, который @Alex-Blex опубликовал в комментариях, где вы выполняете двухэтапные коммиты для постепенного выполнения вашего обновления. (Это немного неправильное название; в их примере семь операций с БД.)

если соединение с MongoDB прервалось, оно напрямую перехватывается «uncaughtException» приложения

Вы можете прослушать это с помощью соединения disconnected и error событий:

 mongoose.connection.on("disconnected", function () {
    // Lost connection to database
});
mongoose.connection.on("reconnected", ...);
  

Обычно эти прослушиватели предназначены для всего приложения, хотя, я полагаю, вы могли бы настроить его на время жизни вашей «транзакции». Вам придется подождать reconnected и повторить / возобновить работу с базой данных. В любом случае вы по-прежнему будете полагаться на то, что ваше приложение не выйдет из строя по какой-либо причине в течение всего срока действия вашей «транзакции».

Если вам нужно, чтобы транзакции были надежными, вероятно, вам нужно обратиться к другой базе данных.