Atualize documentos
Nesta página
Visão geral
Neste guia, você pode aprender como usar o driver Java Reactive Streams para atualizar documentos em uma coleção MongoDB executando operações de atualização.
Uma operação de atualização atualiza um ou mais documentos em uma coleção MongoDB . Você pode executar uma operação de atualização utilizando os métodos updateOne()
ou updateMany()
.
Dados de amostra
Os exemplos neste guia utilizam a coleção do sample_restaurants
restaurants
banco de dados de dados de amostra do Atlas .
Para aprender como criar um agrupamento MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o tutorial deIntrodução ao .
Importante
Biblioteca do Reator do Projeto
Este guia usa a biblioteca Project Reactor para consumir instâncias do Publisher
retornadas pelos métodos de driver Java Reactive Streams. Para saber mais sobre a biblioteca do Project Reactor e como usá-la, consulte Introdução na documentação do Reactor. Para saber mais sobre como usamos os métodos da biblioteca do Project Reactor neste guia, consulte o guia Gravar dados no MongoDB .
Atualizar operações
Você pode executar operações de atualização no MongoDB com os seguintes métodos:
updateOne()
, que atualiza o primeiro documento que corresponde aos critérios de pesquisaupdateMany()
, que atualiza todos os documentos que correspondem aos critérios de pesquisa
Cada método de atualização exige os seguintes parâmetros:
documento de filtro de query , que determina os documentos a serem atualizados. Para obter mais informações sobre como usar filtros de query, consulte a seção Filtros .
documento de atualização , que especifica o operador de atualização (o tipo de atualização a ser executada) e os campos e valores a serem alterados. Para obter mais informações sobre operadores de atualização, consulte a seção Operadores de atualização .
Filtros
Cada método de atualização requer um filtro de query, que especifica os critérios de pesquisa que determinam quais documentos selecionar para atualizações. Para facilitar a criação de objetos de filtro, o driver fornece a classe Filters
que fornece métodos assistente de condição de filtro.
Para visualizar uma lista de Filters
auxiliares do , consulte a documentação da API de filtros . Para obter mais informações sobre filtros de query, consulte a seção Documentos de filtro de query no manual do MongoDB Server .
Operadores de atualização
Para alterar um campo em um documento, o MongoDB fornece operadores de atualização. Para especificar a modificação a ser executada usando os operadores de atualização, crie um documento de atualização. Para facilitar a criação de documentos de atualização, o driver fornece a classe assistente Updates
que contém métodos assistente de condição de filtro.
Importante
O campo _id
é imutável, então você não pode alterar o valor do campo _id
em um documento.
Para saber mais sobre operadores de atualização, consulte Operadores de atualização no manual do servidor.
Atualizar um documento
Para atualizar um único documento em uma coleção MongoDB , chame o método updateOne()
e passe seu filtro de query e operadores de atualização. Em seguida, passe o resultado updateOne()
para o método Mono.from()
estático de Mono
. Mono
é uma classe da biblioteca do Project Reactor. No Java Reactive Streams, os métodos do driver retornam instâncias Publisher
frios, o que significa que a operação correspondente não acontece a menos que você assine o Publisher
retornado. Este guia usa a biblioteca do Project Reactor para consumi-los. Para saber mais sobre Mono
, consulte Mono na documentação do Projeto Reactor.
O exemplo seguinte utiliza o método updateOne()
para atualizar o valor name
de um documento correspondente de "Bagels N Buns"
para "2 Bagels 2 Buns"
:
Publisher<UpdateResult> updatePublisher = restaurants.updateOne(eq("name", "Bagels N Buns"), set("name", "2 Bagels 2 Buns")); Mono.from(updatePublisher).block();
Atualizar vários documentos
Para atualizar vários documentos em uma coleção MongoDB , chame o método updateMany()
e passe seu filtro de query e operadores de atualização. Em seguida, passe o resultado updateMany()
para o método Mono.from()
estático de Mono
. Mono
é uma classe da biblioteca do Project Reactor. No Java Reactive Streams, os métodos do driver retornam instâncias Publisher
frios, o que significa que a operação correspondente não acontece a menos que você assine o Publisher
retornado. Este guia usa a biblioteca do Project Reactor para consumi-los. Para saber mais sobre Mono
, consulte Mono na documentação do Projeto Reactor.
O exemplo a seguir usa o método updateMany()
para atualizar todos os documentos que têm um valor cuisine
de "Pizza"
para ter um valor cuisine
de "Pasta"
:
Publisher<UpdateResult> updatePublisher = restaurants.updateMany(eq("cuisine", "Pizza"), set("cuisine", "Pasta")); Mono.from(updatePublisher).block();
Personalizar a operação de atualização
A classe UpdateOptions
contém métodos que modificam o comportamento dos métodos de atualização. Para usar a classe UpdateOptions
, construa uma nova instância da classe e chame um ou mais de seus métodos para modificar a operação de atualização. Você pode encadear essas chamadas de método. Para modificar o comportamento da operação de atualização, passe a instância da classe e as chamadas de método encadeadas como o terceiro argumento para o método updateOne()
ou updateMany()
.
Você pode utilizar os seguintes métodos opcionais na classe UpdateOptions
para modificar uma operação de atualização:
Método | Descrição |
---|---|
arrayFilters(List<? extends Bson> arrayFilters) | Specifies which array elements an update applies
to. |
bypassDocumentValidation(Boolean bypassDocumentValidation) | Specifies whether the update operation bypasses document validation. This lets you
update documents that don't meet the schema validation requirements, if any
exist. For more information about schema validation, see Schema
Validation in the MongoDB
Server manual. |
collation(Collation collation) | Specifies the kind of language collation to use when sorting
results. For more information, see Collation
in the MongoDB Server manual. |
comment(Bson comment) | Attaches a Bson comment to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. |
comment(String comment) | Attaches a String comment to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. |
hint(Bson hint) | Sets the index for the operation as a Bson value.
For more information, see the hint statement
in the MongoDB Server manual. |
hint(String hint) | Sets the index for the operation as a String value.
For more information, see the hint statement
in the MongoDB Server manual. |
let(Bson variables) | Specifies a map of parameter names and values. Values must be constant or closed
expressions that don't reference document fields. For more information,
see the let statement in the
MongoDB Server manual. |
upsert(Boolean upsert) | Specifies whether the update operation performs an upsert operation if no
documents match the query filter. For more information, see the upsert
statement
in the MongoDB Server manual. |
Exemplo
O código a seguir usa o método updateMany()
para localizar todos os documentos em que o campo borough
tem o valor "Manhattan"
. Em seguida, ele atualiza o valor borough
nesses documentos para "Manhattan (north)"
. Como a opção upsert
está definida como true
, o driver Java Reactive Streams insere um novo documento se o filtro de query não corresponder a nenhum documento existente.
Publisher<UpdateResult> updatePublisher = restaurants.updateMany( eq("borough", "Manhattan"), set("borough", "Manhattan (north)"), new UpdateOptions().upsert(true)); Mono.from(updatePublisher).block();
Valor de retorno
Os métodos updateOne()
e updateMany()
retornam um objeto UpdateResult
. O tipo UpdateResult
contém os seguintes métodos de instância:
Método | Descrição |
---|---|
getMatchedCount() | The number of documents that matched the query filter, regardless of
how many were updated. |
getModifiedCount() | The number of documents modified by the update operation. If an updated
document is identical to the original, it is not included in this
count. |
getUpsertedId() | The ID of the document that was upserted in the database, if the driver
performed an upsert. Otherwise null . |
wasAcknowledged() | Returns true if the update was acknowledged. |
Informações adicionais
Para obter informações adicionais sobre operadores de atualização, consulte Operadores de atualização no manual do MongoDB Server .
Para obter exemplos de código executáveis de inserção de documentos com o driver Java Reactive Streams, consulte o guia Gravar dados no MongoDB .
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: