Sessions & Transactions

Mongoose 🔴 Senior

Dé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.
#sgbd#interview#database#mongoose

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre