Menu Docs
Página inicial do Docs
/ / /
Java síncrono
/ / /

Modificar documentos

Nesta página

  • Visão geral
  • Update
  • Atualizar parâmetros de operação
  • Substituir
  • Substituir parâmetros de operação

Neste guia, você pode aprender como modificar documentos em uma coleção MongoDB usando dois tipos de operação distintos:

  • Update

  • Substituir

As operações de atualização especificam os campos e valores a serem alterados em um ou mais documentos. Uma operação de substituição especifica o campo e valores para substituir um único documento da sua collection.

Nos exemplos a seguir, uma loja de tintas vende cinco cores diferentes de tinta. A collection paint_inventory representa seu inventário atual:

{ "_id": 1, "color": "red", "qty": 5 }
{ "_id": 2, "color": "purple", "qty": 8 }
{ "_id": 3, "color": "yellow", "qty": 0 }
{ "_id": 4, "color": "green", "qty": 6 }
{ "_id": 5, "color": "pink", "qty": 0 }

As operações de atualização podem modificar campos e valores. Eles aplicam alterações especificadas em um documento de atualização a um ou mais documentos que correspondem ao seu filtro de query.

O método updateOne() altera o primeiro documento que seu filtro de query encontra correspondência e o método updateMany() altera todos os documentos que seu filtro de query encontra correspondência.

Você pode chamar os métodos updateOne() e updateMany() em uma instância MongoCollection como segue:

collection.updateOne(query, updateDocument);
collection.updateMany(query, updateDocument);

Os métodos updateOne() e updateMany() têm os seguintes parâmetros:

  • query especifica um filtro de query com os critérios para corresponder aos documentos a serem atualizados em sua coleção

  • updateDocument especifica os campos e valores a serem modificados no documento ou documentos correspondentes. Para este exemplo, usamos oconstrutor de atualizações para criar o documento de atualização.

Você pode criar o updateDocument utilizando um construtor Updates como segue:

Bson updateDocument = Updates.operator(field, value);

Consulte a documentação da API do MongoDB para obter uma lista completa de construtores de atualizações e seu uso.

A loja de tintas recebe uma nova remessa e precisa atualizar seu estoque. A remessa contém 20 latas de cada cor de tinta.

Para atualizar o inventário, chame o método updateMany() especificando o seguinte:

  • Um filtro de query que corresponda a todas as cores

  • Um documento de atualização que contém instruções para incrementar o campo qty por "20"

Bson filter = Filters.empty();
Bson update = Updates.inc("qty", 20);
UpdateResult result = collection.updateMany(filter, update);
System.out.println("Matched document count: " + result.getMatchedCount());
System.out.println("Modified document count: " + result.getModifiedCount());

Sua saída deve ser semelhante a esta:

Matched document count: 5
Modified document count: 5

O seguinte mostra os documentos atualizados na coleção paint_inventory :

{ "_id": 1, "color": "red", "qty": 25 }
{ "_id": 2, "color": "purple", "qty": 28 }
{ "_id": 3, "color": "yellow", "qty": 20 }
{ "_id": 4, "color": "green", "qty": 26 }
{ "_id": 5, "color": "pink", "qty": 20 }

Se zero documentos corresponderem ao filtro de query na operação de atualização, updateMany() não fará alterações nos documentos na coleção. Consulte nosso guia upsert para saber como inserir um novo documento em vez de atualizar um se nenhum documento corresponder.

Importante

Os métodos updateOne() e updateMany() não podem fazer alterações em um documento que viole restrições de índice único na coleção. Para obter mais informações sobre restrições em índices únicos, consulte Índices únicos no manual do servidor MongoDB.

Uma operação de substituição substitui um documento da sua collection. A substituição ocorre entre um documento ao qual seu filtro de query corresponde e um documento de substituição.

O replaceOne() método remove todos os campos e valores existentes no documento correspondente (exceto o _id campo ) e o substitui pelo documento de substituição.

Você pode chamar o método replaceOne() em uma instância MongoCollection da seguinte forma:

collection.replaceOne(query, replacementDocument);

O método replaceOne() tem os seguintes parâmetros:

  • query especifica um filtro de consulta com os critérios para corresponder a um documento para substituir em sua coleção

  • replacementDocument especifica campos e valores de um novo objeto Document a ser substituído no documento correspondente

A loja de tintas entende que precisa atualizar seu estoque novamente. O que eles pensaram ser 20 latas de tinta laranja é, na verdade, 25 latas de tinta laranja.

Para atualizar o inventário, chame o método replaceOne() especificando o seguinte:

  • Um filtro de query que corresponda a documentos onde o color é "pink"

  • Um documento de substituição em que o color é "orange" e o qty é "25"

Bson filter = Filters.eq("color", "pink");
Document document = new Document("color", "orange").append("qty", 25);
UpdateResult result = collection.replaceOne(filter, document);
System.out.println("Matched document count: " + result.getMatchedCount());
System.out.println("Modified document count: " + result.getModifiedCount());

Sua saída deve ser semelhante a esta:

Matched document count: 1
Modified document count: 1

A seguir, mostra o documento atualizado:

{ "_id": 5, "color": "orange", "qty": 25 }

Se zero documentos corresponderem ao filtro de query na operação de substituição, replaceOne() não fará alterações nos documentos na coleção. Consulte nosso guia upsert para saber como inserir um novo documento em vez de substituir um se nenhum documento corresponder.

Se vários documentos corresponderem ao filtro de consulta especificado no método replaceOne() , ele substituirá o primeiro resultado.

Importante

O método replaceOne() não pode fazer alterações em um documento que viole restrições de índice exclusivas na collection. Para obter mais informações sobre restrições em índices únicos, consulte Índices únicos no manual do MongoDB Server .

Voltar

Exclua documentos