Menu Docs
Página inicial do Docs
/ / /
Driver de fluxos reativos do Java
/

Atualize documentos

Nesta página

  • Visão geral
  • Dados de amostra
  • Atualizar operações
  • Filtros
  • Operadores de atualização
  • Atualizar um documento
  • Atualizar vários documentos
  • Personalizar a operação de atualização
  • Exemplo
  • Valor de retorno
  • Informações adicionais
  • Documentação da API

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() .

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 .

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 pesquisa

  • updateMany(), 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 .

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 .

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.

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();

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();

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.

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();

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.

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 .

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

Voltar

Insira documentos