#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
и повторить / возобновить работу с базой данных. В любом случае вы по-прежнему будете полагаться на то, что ваше приложение не выйдет из строя по какой-либо причине в течение всего срока действия вашей «транзакции».
Если вам нужно, чтобы транзакции были надежными, вероятно, вам нужно обратиться к другой базе данных.