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

Atualize documentos

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 usam a collection restaurants do banco de dados de dados sample_restaurants nos conjuntos de dados de amostra do Atlas .

Para saber como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de amostra, consulte o tutorial de Introdução .

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 Projeto 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 ver uma lista de Filters auxiliares, 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 o 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 o 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)

Especifica a quais elementos da array uma atualização se aplica.

bypassDocumentValidation(Boolean bypassDocumentValidation)

Especifica se a operação de atualização ignora a validação do documento . Isso permite atualizar documentos que não atendam aos requisitos de validação de esquema , se houver. Para obter mais informações sobre validação de esquema, consulte Validação de esquema no manual do MongoDB Server .

collation(Collation collation)

Especifica o tipo de agrupamento de idiomas a ser usado ao classificar os resultados. Para obter mais informações, consulte Agrupamento no manual do MongoDB Server .

comment(BsonValue comment)

Anexa um Bson comentário à operação. Para obter mais informações, consulte o guia de campos de comando de inserção no manual do MongoDB Server .

comment(String comment)

Anexa um String comentário à operação. Para obter mais informações, consulte o guia de campos de comando de inserção no manual do MongoDB Server .

hint(Bson hint)

Define o índice para a operação como um Bson valor. Para obter mais informações, consulte a declaração de dica no manual do MongoDB Server .

hintString(String hint)

Define o índice para a operação como um String valor. Para obter mais informações, consulte a declaração de dica no manual do MongoDB Server .

let(Bson variables)

Especifica um mapa de nomes e valores de parâmetros. Os valores devem ser expressões constantes ou fechadas que não façam referência aos campos do documento . Para obter mais informações, consulte a declaração let no manual do MongoDB Server .

sort(Bson sort)

Define os critérios de classificação a serem aplicados à operação. Se vários documentos corresponderem ao filtro de query que você passa para o método updateOne(), a operação atualizará o primeiro resultado. Você pode definir essa opção como para aplicar um pedido a documentos correspondentes para ter mais controle sobre qual documento é atualizado.

upsert(Boolean upsert)

Especifica se a operação de atualização executará uma operação de upsert se nenhum documento corresponder ao filtro de consulta. Para obter mais informações, consulte a declaração upsert no manual do MongoDB Server .

Uma operação upsert atualiza documentos que correspondem ao seu filtro de queries e insere um novo documento se não houver correspondências com o seu filtro de queries.

O código a seguir usa o método updateMany() para localizar todos os documentos onde 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 queries não corresponder a nenhum documento existente. O exemplo retorna o número de documentos que correspondem ao filtro de queries e o número de documentos modificados pela operação upsert.

Bson filter = Filters.eq("borough", "Manhattan");
Bson update = Updates.set("borough", "Manhattan (north)");
UpdateOptions options = new UpdateOptions().upsert(true);
Publisher<UpdateResult> updateManyPublisher = restaurants.updateMany(filter, update, options);
UpdateResult result = Mono.from(updateManyPublisher).block();
System.out.println("Matched: " + result.getMatchedCount()
+ ", Modified: " + result.getModifiedCount()
+ ", Upserted ID: " + result.getUpsertedId());
Matched: 10259, Modified: 10259, Upserted ID: null

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

O número de documentos que corresponderam ao filtro de queries, independentemente de quantos foram atualizados.

getModifiedCount()

O número de documentos modificados pela operação de atualização. Se um documento atualizado for idêntico ao original, ele não será incluído nesta contagem.

getUpsertedId()

A ID do documento que foi atualizado no banco de dados, se o driver tiver realizado um upsert. Caso contrário, null.

wasAcknowledged()

Retorna verdadeiro se a atualização foi reconhecida.

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 Operações CRUD .

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