Menu Docs
Página inicial do Docs
/ / /
Driver de sincronização Java
/ /

Atualizar vários documentos

Você pode atualizar diversos documentos usando o método updateMany() em um objeto MongoCollection. O método aceita um filtro que corresponde ao documento que você deseja atualizar e uma declaração de atualização que instrui o driver como alterar o documento correspondente. O método updateMany() atualiza todos os documentos na collection que correspondem ao filtro.

Para realizar uma atualização com o método updateMany(), você deve utilizar um filtro de query e um documento de atualização. O filtro de query especifica quais documentos da collection devem ser correspondidos, e o documento de atualização fornece instruções sobre quais alterações devem ser feitas neles.

Opcionalmente, você pode passar uma instância de UpdateOptions para o método updateMany() para modificar o comportamento da chamada. Por exemplo, se você definir o campo upsert do objeto UpdateOptions como true e nenhum documento corresponder ao filtro de query especificado, a operação insere um novo documento composto pelos campos do documento de query e de atualização.

Após a execução bem-sucedida, o método updateMany() gera uma instância de UpdateResult. Você pode recuperar informações, como o número de documentos modificados, chamando o método getModifiedCount(). Se você especificou upsert(true) em um objeto UpdateOptions e a operação resultar em uma inserção, você poderá recuperar o campo _id do novo documento chamando o método getUpsertedId() na instância UpdateResult.

Se sua operação de atualização falhar, o driver gerará uma exceção e não atualizará nenhum dos documentos correspondentes ao filtro. Por exemplo, se você tentar definir um valor para o campo imutável _id em seu documento de atualização, o método updateMany() não atualizará nenhum documento e lançará um MongoWriteException com a mensagem:

Performing an update on the path '_id' would modify the immutable field '_id'

Se o seu documento de atualização contiver uma alteração que viole as regras do índice único, o método lançará um MongoWriteException com uma mensagem de erro semelhante à seguinte:

E11000 duplicate key error collection: ...

Para obter mais informações sobre os tipos de exceções geradas em condições específicas, consulte a documentação da API para updateMany(), cujo link está no final desta página.

Neste exemplo, atualizamos documentos que correspondem a nossa query na collection movies do banco de dados sample_mflix. Realizamos as seguintes atualizações nos documentos correspondentes:

  • Adicione Frequently Discussed à array de genres somente se ela ainda não existir

  • Defina o valor de lastUpdated para o horário atual.

Usamos o construtor Updates , uma classe de fábrica que contém métodos de assistente estática para construir o documento de atualização. Embora você possa passar um documento de atualização em vez de usar o construtor, o construtor oferece verificação de tipo e sintaxe simplificada. Leia nossoguia sobre atualizações na seção Construtores para obter mais informações.

Observação

Esse exemplo se conecta a uma instância do MongoDB usando um URI de conexão. Para saber mais sobre como se conectar à sua instância do MongoDB, consulte o Guia de conexão.

// Updates documents that match a query filter by using the Java driver
package usage.examples;
import static com.mongodb.client.model.Filters.gt;
import org.bson.Document;
import org.bson.conversions.Bson;
import com.mongodb.MongoException;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.UpdateResult;
public class UpdateMany {
public static void main(String[] args) {
// Replace the uri string with your MongoDB deployment's connection string
String uri = "<connection string uri>";
try (MongoClient mongoClient = MongoClients.create(uri)) {
MongoDatabase database = mongoClient.getDatabase("sample_mflix");
MongoCollection<Document> collection = database.getCollection("movies");
Bson query = gt("num_mflix_comments", 50);
// Creates instructions to update the values of two document fields
Bson updates = Updates.combine(
Updates.addToSet("genres", "Frequently Discussed"),
Updates.currentTimestamp("lastUpdated"));
try {
// Updates documents that have a "num_mflix_comments" value over 50
UpdateResult result = collection.updateMany(query, updates);
// Prints the number of updated documents
System.out.println("Modified document count: " + result.getModifiedCount());
// Prints a message if any exceptions occur during the operation
} catch (MongoException me) {
System.err.println("Unable to update due to an error: " + me);
}
}
}
}

Depois de executar o exemplo, você verá um resultado parecido com este:

Modified document count: 53

Se você consultar o documento ou documentos atualizado(s), ele(s) deverá(ão) se parecer com o seguinte:

[
Document {
{ _id=...,
plot=...,
genres=[..., Frequently Discussed, ...],
...
lastUpdated=Timestamp{...}
}
},
...
]

Dica

Legacy API

Se você estiver usando a API herdada, consulte nossa página de perguntas frequentes para saber quais alterações devem ser feitas nesse exemplo de código.

Para obter mais informações sobre as classes e métodos mencionados nesta página, consulte a seguinte documentação da API:

  • UpdateMany

  • UpdateOptions

  • combine()

  • addToSet()

  • currentTimestamp()

  • UpdateResult

Voltar

UpdateOne