Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Session.withTransaction() (método mongosh)

Session.withTransaction( <function> [, <options> ] )

Nuevo en mongosh v1.1.0

Ejecuta una función lambda especificada dentro de una transacción. Si hay un error, el método reintenta lo siguiente:

  • operación de confirmación, si hay una falla al confirmar.

  • la transacción completa, si el error lo permite.

The Session.withTransaction() method accepts the transaction options.

Devuelve:

El valor producido por la función de retorno.

Importante

Método mongosh

This page documents a mongosh method. This is not the documentation for database commands or language-specific drivers, such as Node.js.

Para el comando de base de datos, consulta el comando commitTransaction.

Para los drivers de API de MongoDB, consulte la documentación del driver de MongoDB específica del lenguaje.

The Node.js driver has a version of Session.withTransaction() that is known as the Callback API. The Callback API also accepts an callback, however the return type for the Node.js method must be a Promise. The mongosh Session.withTransaction() method does not require a Promise. Example -------

El siguiente ejemplo crea la colección balances y utiliza una transacción para transferir dinero entre dos clientes.

Crear la colección balances:

use accounts
db.balances.insertMany( [
{ customer: "Pat", balance: Decimal128( "35.88" ) },
{ customer: "Sasha", balance: Decimal128( "5.23" ) }
] )

Inicializa algunas variables que se utilizan en la transacción:

var fromAccount = "Pat"
var toAccount = "Sasha"
var transferAmount = 1
var dbName = "accounts"
var collectionName = "balances"

Inicia una sesión y, a continuación, ejecuta una transacción para actualizar las cuentas:

var session = db.getMongo().startSession( { readPreference: { mode: "primary" } } );
session.withTransaction( async() => {
const sessionCollection = session.getDatabase(dbName).getCollection(collectionName);
// Check needed values
var checkFromAccount = sessionCollection.findOne(
{
"customer": fromAccount,
"balance": { $gte: transferAmount }
}
)
if( checkFromAccount === null ){
throw new Error( "Problem with sender account" )
}
var checkToAccount = sessionCollection.findOne(
{ "customer": toAccount }
)
if( checkToAccount === null ){
throw new Error( "Problem with receiver account" )
}
// Transfer the funds
sessionCollection.updateOne(
{ "customer": toAccount },
{ $inc: { "balance": transferAmount } }
)
sessionCollection.updateOne(
{ "customer": fromAccount },
{ $inc: { "balance": -1 * transferAmount } }
)
} )

La función lambda incluye comprobaciones iniciales para validar la operación antes de actualizar la colección balances.

MongoDB completa automáticamente la transacción.

  • Si ambas operaciones de updateOne() tienen éxito, Session.withTransaction() confirma la transacción cuando la función de retorno devuelve.

  • Si se produce una excepción dentro de la función de retorno, Session.withTransaction() finaliza la transacción y revierte cualquier cambio no confirmado.

Nota

De forma predeterminada, MongoDB finaliza las transacciones que se ejecutan durante más de 60 segundos. Si desea ampliar el tiempo de espera predeterminado para experimentar con transacciones mongosh de, consulte Límite de tiempo de ejecución.

Califique esta página