Sessions & Transactions
Mongoose 🔴 SeniorDéfinition
Mongoose expose les transactions MongoDB via mongoose.startSession() puis session.withTransaction(), qui gère automatiquement commit/abort et les retries sur erreurs transitoires. Connection#transaction() est un wrapper Mongoose qui réinitialisé l'état des documents modifies en cas d'échec, pour permettre une nouvelle tentative de save().
Analogie
Comme un brouillon qu'on jette entièrement et qu'on recommence depuis zéro si l'écriture finale au propre échoué, plutôt que de laisser des ratures.
Exemple de code
const session = await mongoose.startSession();
await session.withTransaction(async () => {
await Account.updateOne(
{ _id: 'A' }, { $inc: { bal: -100 } }, { session }
);
await Account.updateOne(
{ _id: 'B' }, { $inc: { bal: 100 } }, { session }
);
});
await session.endSession();
Cas d'usage
Garantir l'atomicité d'un virement entre deux documents Mongoose distincts.
Anti-pattern
Oublier de passer { session } a chaque opération de la transaction : l'opération s'exécute alors hors transaction.
Termes liés
Fiche mise à jour le 2026-09-27