Menu Docs
Página inicial do Docs
/ / /
Controlador Node.js
/

Realizar operações em massa

O método bulkWrite() executa operações de gravação em lote em uma coleção. Esse método reduz o número de viagens de ida e volta de rede do aplicativo para o servidor, o que, portanto, aumenta a taxa de transferência e o desempenho. As gravações em massa retornam uma coleção de resultados para todas as operações somente depois que todas as operações passadas para o método forem concluídas.

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

  • insertOne

  • updateOne

  • updateMany

  • deleteOne

  • deleteMany

  • replaceOne

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

  • operations: especifica as operações de gravação em massa a serem executadas. Passe cada operação para bulkWrite() como um objeto em uma array. Para obter exemplos que mostram a sintaxe de cada operação de gravação, consulte a documentação da API bulletWrite.

  • options: configurações opcionais que afetam a execução da operação, por exemplo, a preocupação de gravação e se as operações de gravação são executadas em ordem sequencial ou não.

    Por padrão, o MongoDB executa operações de gravação em massa uma a uma na ordem especificada (em série). 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. Em comparação, quando ordered é false, o MongoDB continua processando as operações de gravação restantes na lista. As operações não ordenadas são teoricamente mais rápidas, já que o MongoDB pode executá-las em paralelo, mas só pode usá-las se as gravações não dependerem da ordem.

Se você criar um índice com uma restrição de índice exclusivo, poderá encontrar um erro de gravação de chave duplicada durante uma operação no seguinte formato:

Error during bulkWrite, BulkWriteError: E11000 duplicate key error collection: ...

Da mesma forma, se você tentar executar uma gravação em massa em uma coleção que usa validação de esquema, você poderá encontrar avisos ou erros relacionados à formatação de documentos inseridos ou modificados.

O exemplo de código a seguir executa uma operação de gravação em massa na coleção theaters do banco de dados sample_mflix . O exemplo de chamada para bulkWrite() inclui exemplos de operações de gravação insertOne, updateMany e deleteOne:

Observação

Você pode utilizar este exemplo para se conectar a uma instância do MongoDB e interagir com um banco de dados que contém dados de amostra. Para saber mais sobre como se conectar à sua instância do MongoDB e carregar um conjunto de dados de amostra, consulte o guia Exemplos de uso.

1// Bulk write operation
2
3// Import MongoClient from the MongoDB node driver package
4const { MongoClient } = require("mongodb");
5
6// Replace the uri string with your MongoDB deployment's connection string
7const uri = "<connection string uri>";
8
9const client = new MongoClient(uri);
10
11async function run() {
12 try {
13 const database = client.db("sample_mflix");
14 const theaters = database.collection("theaters");
15
16 // Insert a new document into the "theaters" collection
17 const result = await theaters.bulkWrite([
18 {
19 insertOne: {
20 document: {
21 location: {
22 address: {
23 street1: "3 Main St.",
24 city: "Anchorage",
25 state: "AK",
26 zipcode: "99501",
27 },
28 },
29 },
30 },
31 },
32 {
33 insertOne: {
34 document: {
35 location: {
36 address: {
37 street1: "75 Penn Plaza",
38 city: "New York",
39 state: "NY",
40 zipcode: "10001",
41 },
42 },
43 },
44 },
45 },
46 {
47 // Update documents that match the specified filter
48 updateMany: {
49 filter: { "location.address.zipcode": "44011" },
50 update: { $set: { is_in_ohio: true } },
51 upsert: true,
52 },
53 },
54 {
55 // Delete a document that matches the specified filter
56 deleteOne: { filter: { "location.address.street1": "221b Baker St" } },
57 },
58 ]);
59 // Log the result of the bulk write operation
60 console.log(result);
61 } finally {
62 // Close the database connection when the operations are completed or if an error occurs
63 await client.close();
64 }
65}
66run().catch(console.dir);
1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8interface Address {
9 street1: string;
10 city: string;
11 state: string;
12 zipcode: string;
13}
14
15interface Theater {
16 location: { address: Address };
17 is_in_ohio?: boolean;
18}
19
20async function run() {
21 try {
22 const database = client.db("sample_mflix");
23 const theaters = database.collection<Theater>("theaters");
24
25 const result = await theaters.bulkWrite([
26 {
27 insertOne: {
28 document: {
29 location: {
30 address: {
31 street1: "3 Main St.",
32 city: "Anchorage",
33 state: "AK",
34 zipcode: "99501",
35 },
36 },
37 },
38 },
39 },
40 {
41 insertOne: {
42 document: {
43 location: {
44 address: {
45 street1: "75 Penn Plaza",
46 city: "New York",
47 state: "NY",
48 zipcode: "10001",
49 },
50 },
51 },
52 },
53 },
54 {
55 updateMany: {
56 // Important: You lose type safety when you use dot notation in queries
57 filter: { "location.address.zipcode": "44011" },
58 update: { $set: { is_in_ohio: true } },
59 upsert: true,
60 },
61 },
62 {
63 deleteOne: {
64 filter: { "location.address.street1": "221b Baker St" },
65 },
66 },
67 ]);
68
69 console.log(result);
70 } finally {
71 await client.close();
72 }
73}
74run().catch(console.dir);

Ao executar o exemplo anterior, você verá a seguinte saída:

BulkWriteResult {
insertedCount: 2,
matchedCount: 1,
modifiedCount: 1,
deletedCount: 0,
upsertedCount: 0,
upsertedIds: {},
insertedIds: {
'0': new ObjectId("..."),
'1': new ObjectId("...")
}
}

Voltar

Fique atento às mudanças