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

Realizar operações em massa

O método bulkWrite() executa operações de gravação em lote em uma collection. Esse método reduz o número de viagens de ida e volta da rede do seu aplicativo para a instância do MongoDB, o que aumenta o desempenho do seu aplicativo. Como você só recebe o status de sucesso depois que todas as operações retornam, recomendamos usar isso se for atender aos requisitos do seu caso de uso.

Você pode especificar uma ou mais das seguintes operações de gravação no bulkWrite():

  • Insira um documento

  • Atualizar um documento

  • Atualizar vários documentos

  • Excluir um documento

  • Excluir vários documentos

  • Substituir um documento

O método bulkWrite() aceita os seguintes parâmetros:

  • Um List de objetos que implementam o WriteModel: as classes que implementam o WriteModel correspondem às operações de gravação anteriores. Por exemplo, a classe InsertOneModel envolve o método de gravação insertOne() , que insere um documento. Consulte os links para a documentação da API no final desta página para obter mais informações sobre cada classe.

  • BulkWriteOptions: objeto opcional que especifica configurações, por exemplo, como garantir que a instância do MongoDB ordene suas operações de gravação.

Observação

Retryable writes são executadas nas versões 3.6 ou posteriores do Servidor MongoDB em operações de gravação em massa, a menos que incluam uma ou mais instâncias de UpdateManyModel ou DeleteManyModel.

Dica

Por padrão, o MongoDB executa operações em uma gravação em massa na ordem especificada. Durante uma gravação em massa ordenada, se ocorrer um erro durante o processamento de uma operação, o MongoDB retornará sem processar as operações restantes na lista.

Por outro lado, quando você define a opção ordered como false, o MongoDB continua processando as operações de gravação restantes na lista, mesmo no evento de um erro. As operações não ordenadas geralmente são mais rápidas, pois o MongoDB pode executá-las em paralelo, mas use uma gravação em massa não ordenada somente se a ordem das operações de gravação não for importante.

O método bulkWrite() gera um objeto BulkWriteResult que contém informações sobre os resultados da operação de gravação, incluindo o número de documentos inseridos, modificados e excluídos.

Se uma ou mais de suas operações tentarem definir um valor que viole um índice único em sua collection, uma exceção será gerada da seguinte forma:

The bulk write operation failed due to an error: Bulk write operation error on server <hostname>. Write errors: [BulkWriteError{index=0, code=11000, message='E11000 duplicate key error collection: ... }].

Da mesma forma, se você tentar executar uma gravação em massa em uma collection que usa validação de esquema e uma ou mais de suas operações de escrita fornecer um formato inesperado, você poderá encontrar exceções.

A amostra de código a seguir executa uma operação de gravação ordenada em massa na collection movies do banco de dados sample_mflix. A chamada de exemplo para bulkWrite() inclui exemplos de InsertOneModel, UpdateOneModel e DeleteOneModel.

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 oguia de conexão .

// Runs bulk write operations on a collection by using the Java driver
package usage.examples;
import java.util.Arrays;
import org.bson.Document;
import com.mongodb.MongoException;
import com.mongodb.bulk.BulkWriteResult;
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.DeleteOneModel;
import com.mongodb.client.model.InsertOneModel;
import com.mongodb.client.model.ReplaceOneModel;
import com.mongodb.client.model.UpdateOneModel;
import com.mongodb.client.model.UpdateOptions;
public class BulkWrite {
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");
try {
// Runs a bulk write operation for the specified insert, update, delete, and replace operations
BulkWriteResult result = collection.bulkWrite(
Arrays.asList(
new InsertOneModel<>(new Document("name", "A Sample Movie")),
new InsertOneModel<>(new Document("name", "Another Sample Movie")),
new InsertOneModel<>(new Document("name", "Yet Another Sample Movie")),
new UpdateOneModel<>(new Document("name", "A Sample Movie"),
new Document("$set", new Document("name", "An Old Sample Movie")),
new UpdateOptions().upsert(true)),
new DeleteOneModel<>(new Document("name", "Yet Another Sample Movie")),
new ReplaceOneModel<>(new Document("name", "Yet Another Sample Movie"),
new Document("name", "The Other Sample Movie").append("runtime", "42"))
));
// Prints the number of inserted, updated, and deleted documents
System.out.println("Result statistics:" +
"\ninserted: " + result.getInsertedCount() +
"\nupdated: " + result.getModifiedCount() +
"\ndeleted: " + result.getDeletedCount());
// Prints a message if any exceptions occur during the operations
} catch (MongoException me) {
System.err.println("The bulk write operation failed due to an error: " + me);
}
}
}
}

A saída do código anterior se assemelha ao seguinte:

Result statistics:
inserted: 3
updated: 2
deleted: 1

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 informações adicionais sobre as classes e métodos mencionados nesta página, consulte os seguintes recursos:

  • Entrada manual do servidor Índice único

  • Validação de esquema Entrada manual do servidor

  • Documentação da API do bulkWrite()

  • BulkWriteOptions Documentação da API

  • BulkWriteResult Documentação da API

  • InsertOneModel Documentação da API

  • Documentação da API do UpdateOneModel

  • Documentação da API do UpdateManyModel

  • Documentação da API do DeleteOneModel

  • Documentação da API do DeleteManyModel

  • Documentação da API do ReplaceOneModel

Voltar

Excluir vários documentos