@hermina.hauck
В Mongoose транзакции могут использоваться для группировки нескольких операций базы данных в единую транзакцию, которая должна быть либо полностью выполнена, либо откатиться при возникновении ошибки. Для использования транзакций в Mongoose следуйте приведенным ниже шагам:
- Начните транзакцию с помощью метода startSession() и передайте ему объект опций.
1
2
|
const session = await mongoose.startSession();
session.startTransaction();
|
- Выполните операции базы данных внутри транзакции. Например, создайте новый документ:
1
2
|
const doc = new Model({ name: 'John Doe' });
await doc.save({ session });
|
- Если все операции прошли успешно, подтвердите транзакцию с помощью метода commitTransaction():
1
|
await session.commitTransaction();
|
- Если при выполнении операций произошла ошибка, отмените транзакцию с помощью метода abortTransaction():
1
|
await session.abortTransaction();
|
- Наконец, закройте сессию с помощью метода 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 с использованием транзакций. Если все операции выполнены успешно, транзакция подтверждается. Если произошла ошибка, транзакция отменяется, и в консоль выводится ошибка. Наконец, сессия закрывается.