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.
Menu Docs

Modificar execução de operações CRUD

Neste guia, você pode aprender a modificar a maneira como o MongoDB Go Driver executa as operações de criação, leitura, atualização e exclusão (CRUD) usando configurações de preocupação de gravação, preocupação de leitura e preferência de leitura para conjuntos de réplicas.

É possível definir as opções de preocupação de gravação, preocupação de leitura e preferência de leitura nos seguintes níveis:

  • Nível do cliente, que define o padrão para todas as execuções de operações, a menos que sejam substituídas

  • Nível da sessão

  • Nível de transação

  • Nível do banco de dados

  • Nível de collection

Nas seções a seguir, você aprenderá a personalizar a consistência e a disponibilidade dos dados em seus conjuntos de réplicas.

Uma referência de escrita descreve o número de membros portadores de dados em um conjunto de réplicas que devem reconhecer uma operação de gravação, como uma inserção ou atualização, antes que a operação seja retornada como bem-sucedida. Por padrão, a referência de escrita exige que apenas o membro primary do conjunto de réplicas reconheça a operação de escrita antes que a operação seja considerada bem-sucedida.

O MongoDB Go Driver fornece o pacote writeconcern, que permite especificar a preocupação de gravação para um conjunto de réplicas. Defina a preocupação de gravação usando o método SetWriteConcern() com um tipo WriteConcern. O tipo WriteConcern tem os seguintes métodos para selecionar especificações comuns de problemas de gravação:

Método
Descrição

Custom()

The client requests acknowledgement that write operations propagate to tagged members of a mongod instance. For more information, see the Write Concern specification.

Parameter: string

Journaled()

The client requests acknowledgement that write operations are written to the on-disk journal. For more information, see the Write Concern specification.

Parameter: none

Majority()

The client requests acknowledgement that write operations propagate to the majority of data-bearing voting members. For more information, see the Write Concern specification.

Parameter: none

Unacknowledged()

The client requests requests no acknowledgment of write operations. For more information, see the Write Concern specification for w: 0.

Parameter: none

W1()

The client requests acknowledgement that write operations have been written to memory on one node, such as the standalone mongod or the primary in a replica set. For more information, see the Write Concern specification for w: 1.

Parameter: none

Se você precisar de uma preocupação de gravação mais especializada, você pode definir um literal de estrutura WriteConcern personalizado. Você pode definir os seguintes campos em uma estrutura WriteConcern:

Campo
Descrição

W

Especifica o número de instâncias de mongod ou nós de tag para os quais as operações de gravação devem se propagar para confirmação. Valores comuns incluem 1, 0 e "majority".

Tipo: string ou int

Journal

Especifica se as operações de gravação devem ser gravadas no registro no diário em disco para confirmação.

Tipo: bool

WTimeout

Specifies a time limit for the write concern. This setting is applicable only for W values greater than 1. Specifying this setting and specifying a Timeout on the client at the same time results in undefined behavior. To learn more, see the Write Concern specification for wtimeout.

Type: time.Duration

Dica

Como alternativa, você pode especificar uma write concern em sua connection string. Consulte a entrada manual do servidor MongoDB em Opções de write concern para obter mais informações.

O código a seguir mostra como você pode especificar diferentes referências de escrita no nível do cliente e da collection. A referência de escrita no nível do cliente solicita confirmação de dois membros do conjunto de réplicas e define o registro no diário como false. A referência de escrita no nível da collection solicita confirmação da maioria dos membros do conjunto de réplicas.

uri := "mongodb://<hostname>:<port>"
journal := false
cliWC := &writeconcern.WriteConcern{
W: 2,
Journal: &journal,
}
clOpts := options.Client().ApplyURI(uri).SetWriteConcern(cliWC)
client, err := mongo.Connect(context.TODO(), clOpts)
...
collWC := writeconcern.Majority()
collOpts := options.Collection().SetWriteConcern(collWC)
coll := client.Database("db").Collection("myColl", collOpts)

A opção de preocupação de leitura possibilita que você determine quais dados o cliente retorna de uma query. O nível de preocupação de leitura padrão é "local", o que significa que o cliente retorna os dados mais recentes da instância, sem garantia de que os dados tenham sido gravados na maioria dos membros do conjunto de réplicas.

O driver Go do MongoDB fornece o pacote readconcern, que permite especificar a preocupação de leitura para um conjunto de réplicas. Defina a preocupação de leitura usando o método SetReadConcern() com um tipo ReadConcern. O tipo ReadConcern tem os seguintes métodos para especificar a preocupação de leitura:

Método
Descrição

Available()

A query retorna dados da instância sem garantia de que os dados tenham sido gravados na maioria dos membros do conjunto de réplicas. Para obter mais informações, consulte a especificação Read Concern.

Linearizable()

A query retorna dados que refletem todas as escritas bem-sucedidas emitidas com uma write concern de majority e reconhecidas antes do início da operação de leitura. Para obter mais informações, consulte a especificação Read Concern.

Local()

A query retorna os dados mais recentes da instância. Para obter mais informações, consulte a especificação Read Concern.

Majority()

The query returns the instance’s most recent data acknowledged as having been written to a majority of members in the replica set. For more information, see the Read Concern specification.

Snapshot()

A query retorna uma cópia completa dos dados em uma instância do mongod em um ponto específico no tempo. Disponível apenas para operações em transações de vários documentos. Para obter mais informações, consulte a especificação Read Concern.

O código a seguir mostra como você pode especificar uma read concern de "maioria". O código então seleciona um Collection com esta opção.

rc := readconcern.Majority()
opts := options.Collection().SetReadConcern(rc)
database := client.Database("db")
coll := database.Collection("myCollection", opts)

A opção de preferência de leitura especifica como o cliente MongoDB roteia as operações de leitura para os membros de um conjunto de réplica. Por padrão, um aplicativo direciona suas operações de leitura para o membro primário em um conjunto de réplicas.

Read preference consists of the read preference mode and, optionally, a tag set list, the maxStalenessSeconds option, and the hedged read option.

O driver Go do MongoDB fornece o pacote readpref, que permite especificar a preferência de leitura para um conjunto de réplicas. Defina a preferência de leitura usando o método SetReadPreference() com um tipo ReadPref. O tipo ReadPref tem os seguintes métodos para especificar a preferência de leitura:

Método
Descrição

Nearest()

The client reads from a random eligible replica set member, primary or secondary, based on a specified latency threshold. For more information, see the Read Preference Server manual entry.

Primary()

O cliente lê a partir do nó primário do conjunto de réplicas atual. Para obter mais informações, consulte a entrada manual do servidor MongoDB de preferência de leitura.

PrimaryPreferred()

The client reads from the primary node in most situations. If the primary is unavailable, operations read from secondary members. For more information, see the Read Preference Server manual entry.

Secondary()

The client reads from the secondary members of the replica set. For more information, see the Read Preference Server manual entry.

SecondaryPreferred()

The client reads from the secondary nodes in most situations. If the secondaries are unavailable, operations read from the primary member. For more information, see the Read Preference Server manual entry.

Dica

Como alternativa, você pode especificar uma read preference em sua connection string. Consulte a entrada manual do servidor MongoDB em Opções de preferência de leitura para obter mais informações.

O código a seguir mostra como você pode especificar uma preferência de leitura para ler dos nós secundários. O código então seleciona um Database com essa opção.

rp := readpref.Secondary()
opts := options.Database().SetReadPreference(rp)
database := client.Database("db", opts)

Para obter mais informações sobre os conceitos deste guia, consulte a seguinte documentação do servidor: