Как использовать транзакции в Mongoose?

Пользователь

от hermina.hauck , в категории: JavaScript , год назад

Как использовать транзакции в Mongoose?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от rudolph_senger , год назад

@hermina.hauck 

В Mongoose транзакции могут использоваться для группировки нескольких операций базы данных в единую транзакцию, которая должна быть либо полностью выполнена, либо откатиться при возникновении ошибки. Для использования транзакций в Mongoose следуйте приведенным ниже шагам:

  1. Начните транзакцию с помощью метода startSession() и передайте ему объект опций.
1
2
const session = await mongoose.startSession();
session.startTransaction();


  1. Выполните операции базы данных внутри транзакции. Например, создайте новый документ:
1
2
const doc = new Model({ name: 'John Doe' });
await doc.save({ session });


  1. Если все операции прошли успешно, подтвердите транзакцию с помощью метода commitTransaction():
1
await session.commitTransaction();


  1. Если при выполнении операций произошла ошибка, отмените транзакцию с помощью метода abortTransaction():
1
await session.abortTransaction();


  1. Наконец, закройте сессию с помощью метода endSession():
1
session.endSession();


Полный пример использования транзакций в Mongoose может выглядеть следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
const session = await mongoose.startSession();
try {
  session.startTransaction();

  const doc = new Model({ name: 'John Doe' });
  await doc.save({ session });

  const doc2 = new Model({ name: 'Jane Doe' });
  await doc2.save({ session });

  await session.commitTransaction();
} catch (error) {
  await session.abortTransaction();
  console.error(error);
} finally {
  session.endSession();
}


В этом примере создаются два документа в базе данных MongoDB с использованием транзакций. Если все операции выполнены успешно, транзакция подтверждается. Если произошла ошибка, транзакция отменяется, и в консоль выводится ошибка. Наконец, сессия закрывается.