Transacciones

Transacciones multidocumento con aislamiento por instantánea entre rangos.

Las transacciones de MongoDB funcionan igual: abres una sesión, haces varias operaciones y las confirmas o las anulas juntas, aunque toquen documentos de rangos y nodos distintos.

JavaScript
const session = db.getMongo().startSession();
session.withTransaction(() => {
  const cuentas = session.getDatabase("banco").cuentas;
  cuentas.updateOne({ _id: "A" }, { $inc: { saldo: -100 } });
  cuentas.updateOne({ _id: "B" }, { $inc: { saldo: 100 } });
});

Aislamiento

Cada transacción lee una instantánea a su marca de lectura y ve sus propias escrituras. Dentro de una transacción, readConcern local, majority y snapshot leen los tres esa misma instantánea.

Cómo confirma

Si todas las claves de la transacción están en un rango, se confirma en una fase. Si no, cada rango guarda versiones provisionales y un registro de transacción decide; la limpieza de esas versiones sigue en segundo plano después de responder.

Límites y errores

Las etiquetas de error (TransientTransactionError, UnknownTransactionCommitResult) y el reintento del commit son los de MongoDB, así que withTransaction de los drivers reintenta lo que debe. transactionLifetimeLimitSeconds vale 60 por defecto y se cambia con setParameter.

Consistencia causal

Las sesiones causales de los drivers funcionan: una lectura con afterClusterTime ve todo lo que la sesión ya escribió o leyó, también si va a otra réplica.