Menu Docs

Página inicial do DocsGo

Transações

Nesta página

  • Visão geral
  • Métodos
  • Exemplo
  • Informações adicionais
  • Documentação da API

Neste guia, você aprenderá como usar as transações com o driver Go do MongoDB . Astransações permitem que você execute uma série de operações que não alteram nenhum dado até que a transação seja confirmada. Se qualquer operação da transação falhar, o driver abortará a transação e descartará todas as alterações de dados antes que elas se tornem visíveis.

No MongoDB, as transações são executadas dentro de sessões lógicas . Uma sessão é um agrupamento de operações de leitura ou escrita relacionadas que você pretende executar sequencialmente. As sessões permitem consistência causal para um grupo de operações ou permitem que você execute operações em uma ACID transaction. O MongoDB garante que os dados envolvidos em suas operações de transação permaneçam , mesmo que as operações encontrem erros inesperados.

Com o driver Go, você pode criar uma nova sessão a partir de uma instância Client como tipo Session .

Aviso

Você deve utilizar uma apenas com o Session ou Database Client que a criou Collection Utilizar uma Session com um Client diferente resultará em erros de operação.

Aviso

Implementações do Session não são seguras para uso concorrente por múltiplos goroutines.

Após iniciar uma sessão utilizando o método StartSession() , você pode modificar o estado da sessão utilizando o conjunto de métodos fornecido pela interface do Session . A tabela a seguir descreve esses métodos:

Método
Descrição
StartTransaction()
Starts a new transaction, configured with the given options, on this session. Returns an error if there is already a transaction in progress for the session. For more information, see the manual entry.

Parameter: TransactionOptions
Return Type: error
AbortTransaction()
Aborts the active transaction for this session. Returns an error if there is no active transaction for the session or the transaction has been committed or aborted. For more information, see the manual entry.

Parameter: Context
Return Type: error
CommitTransaction()
Commits the active transaction for this session. Returns an error if there is no active transaction for the session or the transaction has been aborted. For more information, see the manual entry.

Parameter: Context
Return Type: error
WithTransaction()
Starts a transaction on this session and runs the fn callback.

Parameters: Context, fn func(ctx SessionContext), TransactionOptions
Return Type: interface{}, error
EndSession()
Aborts any existing transactions and closes the session.

Parameter: Context
Return Type: none

A interface do Session também tem métodos para recuperar propriedades da sessão e modificar propriedades da sessão mutáveis. Encontre mais informações na documentação da API.

O exemplo a seguir mostra como você pode criar uma sessão, criar uma transação e confirmar uma operação de inserção de vários documentos por meio das seguintes etapas:

  1. Crie uma sessão a partir do cliente utilizando o método StartSession().

  2. Use o método WithTransaction() para iniciar uma transação.

  3. Insere vários documentos. O método WithTransaction() executa a inserção e confirma a transação. Se qualquer operação resultar em erros, o WithTransaction() lida com o cancelamento da transação.

  4. Feche a transação e a sessão usando o método EndSession().

wc := writeconcern.New(writeconcern.WMajority())
txnOptions := options.Transaction().SetWriteConcern(wc)
session, err := client.StartSession()
if err != nil {
panic(err)
}
defer session.EndSession(context.TODO())
result, err := session.WithTransaction(context.TODO(), func(ctx mongo.SessionContext) (interface{}, error) {
result, err := coll.InsertMany(ctx, []interface{}{
bson.D{{"title", "The Bluest Eye"}, {"author", "Toni Morrison"}},
bson.D{{"title", "Sula"}, {"author", "Toni Morrison"}},
bson.D{{"title", "Song of Solomon"}, {"author", "Toni Morrison"}},
})
return result, err
}, txnOptions)

Se você precisar de mais controle sobre suas transações, poderá encontrar um exemplo mostrando como criar, confirmar e cancelar transações manualmente no exemplo de código completo.

Para obter mais informações sobre operações de inserção, consulte a página de fundamentos de Inserir um Documento.

Para obter mais informações sobre write concerns, consulte a página de fundamentos do Modify Execution of CRUD Operations .

Para obter um exemplo adicional usando sessões e transações com o driver Go, consulte a postagem do blog do desenvolvedor sobre Transações ACID de vários documentos.

Para saber mais sobre qualquer um dos tipos ou métodos discutidos neste guia, consulte a seguinte documentação da API:

←  IndexesAgrupamentos →
Dê Feedback
© 2022 MongoDB, Inc.

Sobre

© 2022 MongoDB, Inc.