Docs Menu
Docs Home
/ /
Operaciones CRUD

Transacciones

En esta guía, aprenderá a usar el controlador Kotlin para realizar transacciones. Las transacciones permiten ejecutar una serie de operaciones que no modifican ningún dato hasta que se confirman. Si alguna operación de la transacción devuelve un error, el controlador la cancela y descarta todos los cambios en los datos antes de que sean visibles.

En MongoDB, las transacciones se ejecutan dentro de sesiones lógicas. Una sesión es una agrupación de operaciones de lectura o escritura relacionadas que se ejecutan secuencialmente. Las sesiones permiten la consistencia causal para un grupo de operaciones o ejecutar operaciones en una transacción ACID. MongoDB garantiza que los datos involucrados en las transacciones se mantengan consistentes, incluso si se producen errores inesperados.

Al utilizar el controlador Kotlin, puede crear una nueva sesión desde un MongoClient Instancia como ClientSession. Recomendamos reutilizar el cliente para múltiples sesiones y transacciones en lugar de crear una instancia nueva cada vez.

Advertencia

Use un ClientSession solo con el MongoClient (o el MongoDatabase o MongoCollection asociado) que lo creó. Usar un ClientSession con un MongoClient diferente genera errores de operación.

Cree un ClientSession con el método startSession() en su instancia Client. A continuación, puede modificar el estado de la sesión con los siguientes métodos:

Método
Descripción

startTransaction()

Starts a new transaction for this session with the default transaction options. You cannot start a transaction if there's already an active transaction on the session.

To set transaction options, use startTransaction(transactionOptions: TransactionOptions).

abortTransaction()

Ends the active transaction for this session. Returns an error if there is no active transaction for the session or the transaction was previously ended.

commitTransaction()

Commits the active transaction for this session. Returns an error if there is no active transaction for the session or if the transaction was ended.

Un ClientSession también tiene métodos para recuperar propiedades de sesión y modificar propiedades de sesión mutables. Consulte la documentación de la API. para aprender más sobre estos métodos.

Este ejemplo utiliza la siguiente clase de datos Kotlin para modelar sus documentos:

data class Account(
val accountId: String,
val amount: Int
)

El siguiente ejemplo demuestra cómo puede crear una sesión, crear una transacción y confirmar cambios en documentos existentes:

  1. Cree una sesión desde el cliente utilizando el método startSession().

  2. Utilice el método startTransaction() para iniciar una transacción.

  3. Actualice los documentos especificados, luego utilice el método commitTransaction() si todas las operaciones tienen éxito, o abortTransaction() si alguna operación falla.

// Set up the session
val session = client.startSession()
try {
session.startTransaction()
val savingsColl = database
.getCollection<Account>("savings_accounts")
val checkingColl = database
.getCollection<Account>("checking_accounts")
savingsColl.findOneAndUpdate(
session,
eq(Account::accountId.name, "9876"),
inc(Account::amount.name, -100),
)
checkingColl.findOneAndUpdate(
session,
eq(Account::accountId.name, "9876"),
inc(Account::amount.name, 100)
)
// Commit the transaction
val result = session.commitTransaction()
println("Transaction committed.")
} catch (error: Exception) {
println("An error occurred during the transaction: ${error.message}")
// Abort the transaction
session.abortTransaction()
}

Para obtener más información sobre los conceptos mencionados en esta guía, consulte las siguientes páginas del manual del servidor:

Para obtener más información sobre el cumplimiento de ACID, consulte el artículo ¿Qué son las propiedades ACID en los sistemas de administración de bases de datos? en el sitio web de MongoDB.

Para obtener más información sobre cualquiera de los tipos o métodos analizados en esta guía, consulte la siguiente documentación de API:

Volver

Operaciones compuestas

En esta página