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 comentário Bson à 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 comentário String à 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 valor Bson. 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 valor String. 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 query e insere um novo documento se não houver correspondência com seu filtro de query.

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 de 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. O exemplo retorna o número de documentos que correspondem ao filtro de query 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 de operações CRUD.

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