Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Session.withTransaction() (método mongosh)

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

Novidades no mongosh v1.1.0

Executa uma função lambda especificada em uma transação. Se houver um erro, o método tentará novamente:

  • operação de commit, se houver uma falha no commit.

  • transação inteira, se o erro permitir.

O método Session.withTransaction() aceita as opções de transação..

Retorna:

O valor produzido pela função chamada de resposta.

Importante

Método mongosh

Esta página documenta um método mongosh. Esta não é a documentação para comandos de banco de dados nem drivers específicos de linguagem, como Node.js.

Para o comando do banco de dados, consulte o comando commitTransaction.

Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.

O driver Node.js tem uma versão do Session.withTransaction() conhecida como Callback API. O Callback API também aceita um retorno de chamada, no entanto, o tipo de retorno para o método Node.js deve ser uma Promessa. O método mongosh Session.withTransaction() não requer uma promessa. Exemplo -------

O exemplo a seguir cria a coleta balances e usa uma transação para transferir dinheiro entre dois clientes.

Crie a coleção balances:

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

Inicialize algumas variáveis que são usadas na transação:

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

Inicie uma sessão e execute uma transação para atualizar as contas:

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 } } ) } )

A função lambda inclui verificações iniciais para validar a operação antes de atualizar a coleção balances.

O MongoDB conclui automaticamente a transação.

  • Se ambas as operações updateOne() forem bem-sucedidas, Session.withTransaction() confirmará a transação quando a chamada de resposta retornar.

  • Se uma exceção for lançada dentro da chamada de resposta, o Session.withTransaction() encerra a transação e reverte todas as alterações não confirmadas.

Observação

Por padrão, o MongoDB encerra as transações que são executadas por mais de 60 segundos. Se você quiser estender o tempo limite padrão para experimentar com a transação em mongosh, consulte Limite de tempo de execução.

Avalie esta página