Menu Docs

Página inicial do DocsGo

Operações compostas

Nesta página

  • Visão geral
  • Localize e exclua
  • Encontrar e atualizar
  • Encontrar e substituir
  • Informações adicionais

Neste guia, você aprenderá a realizar operações compostas.

As operações compostas combinam uma operação de leitura e gravação em uma única operação. Se você executar uma operação de leitura e gravação separadamente, há uma chance de que outra pessoa altere o documento entre as duas operações. O MongoDB evita isso colocando um bloqueio de gravação no documento que você está modificando durante a operação composta.

O MongoDB é compatível com as seguintes operações compostas:

Dica

Se você precisar ler e escrever em mais de um documento, use transações.

Execute o seguinte trecho para carregar os documentos na coleção tea.ratings :

coll := client.Database("tea").Collection("ratings")
docs := []interface{}{
bson.D{{"type", "Masala"}, {"rating", 10}},
bson.D{{"type", "Assam"}, {"rating", 5}},
bson.D{{"type", "Oolong"}, {"rating", 7}},
bson.D{{"type", "Earl Grey"}, {"rating", 8}},
bson.D{{"type", "English Breakfast"}, {"rating", 5}},
}
result, err := coll.InsertMany(context.TODO(), docs)
if err != nil {
panic(err)
}
fmt.Printf("Number of documents inserted: %d\n", len(result.InsertedIDs))

Dica

Bancos de Dados e Coleções Inexistentes

Se o banco de dados e a collection necessários não existirem quando você executar uma operação de escrita, o servidor implicitamente os criará.

Cada documento contém uma classificação para um tipo de chá que corresponde aos campos type e rating .

Observação

Cada exemplo trunca o valor ObjectID porque o driver o gera exclusivamente.

O método FindOneAndDelete() encontra o primeiro documento que corresponde ao filtro de query especificado e o exclui. O método retorna um SingleResult contendo o documento excluído.

Observação

Este método é diferente do método DeleteOne() . O FindOneAndDelete() executa uma localização e uma exclusão como uma única operação e elimina a possibilidade de alguém alterar um documento entre ambas as operações.

Você pode modificar o comportamento do método FindOneAndDelete() passando um FineOneAndDeleteOptions. Se você não especificar um FineOneAndDeleteOptions, o driver utilizará os valores padrão para cada opção.

O tipo FineOneAndDeleteOptions permite a você configurar opções com os seguintes métodos:

Método
Descrição
SetCollation()
The type of language collation to use when sorting results.
Default: nil
SetMaxTime()
The maximum amount of time that the query can run on the server.
Default: nil
SetProjection()
The fields to include in the document returned.
Default: nil
SetSort()
The sort fields and directions to order the documents matched.
Default: nil
SetHint()
The index to use to scan for documents.
Default: nil

O exemplo a seguir corresponde e exclui um documento onde o type é "Assam" com o método FindOneAndDelete() :

filter := bson.D{{"type", "Assam"}}
var deletedDoc bson.D
err := coll.FindOneAndDelete(context.TODO(), filter).Decode(&deletedDoc)
if err != nil {
panic(err)
}
fmt.Println(deletedDoc)

O método FindOneAndUpdate() localiza o primeiro documento que corresponde ao filtro de query especificado e o atualiza de acordo com o documento de atualização. O método retorna um SingleResult que contém o documento correspondente.

Observação

Este método é diferente do método UpdateOne() . FindOneAndUpdate() executa uma localização e uma atualização como uma única operação e elimina a possibilidade de alguém alterar um documento entre ambas as operações.

Você pode modificar o comportamento do método FindOneAndUpdate() passando um FineOneAndUpdateOptions. Se você não especificar um FineOneAndUpdateOptions, o driver utilizará os valores padrão para cada opção.

O tipo FineOneAndUpdateOptions permite a você configurar opções com os seguintes métodos:

Método
Descrição
SetArrayFilters()
The array elements the update applies to.
Default: nil
SetBypassDocumentValidation()
Whether to allow the write operation to opt-out of document level validation.
Default: false
SetCollation()
The type of language collation to use when sorting results.
Default: nil
SetMaxTime()
The maximum amount of time that the query can run on the server.
Default: nil
SetProjection()
The fields to include in the document returned.
Default: nil
SetReturnDocument()
Whether to return the original or updated document in the SingleResult.
Default: options.Before
SetSort()
The sort fields and directions to order the documents matched.
Default: nil
SetUpsert()
Whether to insert a new document if the query filter doesn't match any documents.
Default: false
SetHint()
The index to use to scan for documents.
Default: nil

O exemplo a seguir executa as seguintes ações em ordem com o método FindOneAndUpdate() :

  • Corresponde a um documento onde o type é "Oolong"

  • Atualiza o rating do documento correspondente para 9

  • Retorna o documento atualizado

filter := bson.D{{"type", "Oolong"}}
update := bson.D{{"$set", bson.D{{"rating", 9}}}}
opts := options.FindOneAndUpdate().SetReturnDocument(options.After)
var updatedDoc bson.D
err := coll.FindOneAndUpdate(context.TODO(), filter, update, opts).Decode(&updatedDoc)
if err != nil {
panic(err)
}
fmt.Println(updatedDoc)

O método FindOneAndReplace() localiza o primeiro documento que corresponde ao filtro de query especificado e o substitui pelo documento de substituição. O método retorna um SingleResult contendo o documento correspondente.

Observação

Este método é diferente do método ReplaceOne() . FindOneAndReplace() executa uma localização e substituição como uma única operação e elimina a possibilidade de alguém alterar um documento entre as duas operações.

Você pode modificar o comportamento do método FindOneAndReplace() passando um FineOneAndReplaceOptions. Se você não especificar um FineOneAndReplaceOptions, o driver utilizará os valores padrão para cada opção.

O tipo FineOneAndReplaceOptions permite a você configurar opções com os seguintes métodos:

Método
Descrição
SetBypassDocumentValidation()
Whether to allow the write operation to opt-out of document level validation.
Default: false
SetCollation()
The type of language collation to use when sorting results.
Default: nil
SetMaxTime()
The maximum amount of time that the query can run on the server.
Default: nil
SetProjection()
The fields to include in the document returned.
Default: nil
SetReturnDocument()
Whether to return the original or replaced document in the SingleResult.
Default: nil
SetSort()
The sort fields and directions to order the documents matched.
Default: nil
SetUpsert()
Whether to insert a new document if the query filter doesn't match any documents.
Default: false
SetHint()
The index to use to scan for documents.
Default: nil

O exemplo a seguir executa as seguintes ações em ordem com o método FindOneAndReplace() :

  • Corresponde a um documento onde o type é " English pequeno-almoço "

  • Substitui o documento correspondente por um novo documento em que o type é "Cylon" e rating é 6

filter := bson.D{{"type", "English Breakfast"}}
replacement := bson.D{{"type", "Ceylon"}, {"rating", 6}}
var previousDoc bson.D
err := coll.FindOneAndReplace(context.TODO(), filter, replacement).Decode(&previousDoc)
if err != nil {
panic(err)
}
fmt.Println(previousDoc)

Para saber mais sobre como executar as operações mencionadas, consulte os seguintes guias:

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

←  Operações em massaExecute um comando →
Dê Feedback
© 2022 MongoDB, Inc.

Sobre

© 2022 MongoDB, Inc.