Introduction to MongoDB collection.bulkWrite() Method

The bulkWrite() method in MongoDB is an API for performing batch operations that support multiple types of operations such as inserts, updates, and deletes in a single request. Using bulkWrite() can significantly reduce the number of communications with the database and improve data processing efficiency.

Syntax

The syntax of the bulkWrite() method is as follows:

db.collection.bulkWrite(operations, options)

Parameter description:

  • operations: An array containing all operations. Each operation is an object that can be an insert, update, or delete operation.
  • options: Optional parameters for controlling the behavior of the operations, such as timeout and whether to execute in order.

Usage scenarios

bulkWrite() is suitable for the following scenarios:

  • Batch inserts, updates, and deletes: Perform multiple operations in a single request to reduce communications with the database.
  • Execute ordered or unordered operations: The options parameter can be used to control whether the operations are executed in order.
  • Improve data processing efficiency: For bulk processing of large amounts of data, bulkWrite() can significantly improve data processing efficiency.

Example

Example 1: Batch insert documents

Assume we have a collection named products that contains multiple product information documents. Now we need to insert multiple new product documents in bulk. We can use the bulkWrite() method to achieve this. The example code is as follows:

const operations = [
  {
    insertOne: {
      document: { name: "Apple", price: 3.5, stock: 100, status: "active" }
    }
  },
  {
    insertOne: {
      document: { name: "Banana", price: 2.5, stock: 50, status: "active" }
    }
  },
  {
    insertOne: {
      document: { name: "Orange", price: 4.0, stock: 80, status: "active" }
    }
  }
]

db.products.bulkWrite(operations)

In the above code, we use the insertOne operation to insert three new product documents. Each document contains information such as the name, price, stock, and status of the product. With bulkWrite(), we can execute multiple insert operations at once, greatly reducing the number of communications with the database.

Example 2: Batch update documents

Assume we have a collection named products that contains multiple product information documents. Now we need to change the status field of some of the documents from “active” to “inactive”. We can use the bulkWrite() method to update these documents in bulk. The example code is as follows:

const operations = [
  {
    updateOne: {
      filter: { name: "Apple" },
      update: { $set: { status: "inactive" } }
    }
  },
  {
    updateOne: {
      filter: { name: "Banana" },
      update: { $set: { status: "inactive" } }
    }
  }
]

db.products.bulkWrite(operations)

In the above code, we use the updateOne operation to update the status field of two product documents.

Example 3

Suppose we have a collection called “products” that stores multiple product information documents. Each document contains fields such as _id, name, price, stock, and status. Now, we need to update the status field of all products with a stock quantity of 0 to “inactive”. This can be accomplished using the bulkWrite() method.

const operations = [
  {
    updateMany: {
      filter: { stock: 0 },
      update: { $set: { status: "inactive" } }
    }
  }
]

db.products.bulkWrite(operations)

In the above code, we use the updateMany operation to update the status field of all products with a stock quantity of 0 to “inactive”.

In addition to the updateMany operation, the bulkWrite() method supports several other operations, including insertOne, updateOne, replaceOne, and deleteOne. The following code example demonstrates how to perform multiple operations, including insert, update, and delete operations, in a single operation.

const operations = [
  {
    insertOne: {
      document: { name: "Product 1", price: 100, stock: 10, status: "active" }
    }
  },
  {
    updateOne: {
      filter: { name: "Product 2" },
      update: { $set: { price: 200 } }
    }
  },
  {
    deleteOne: {
      filter: { name: "Product 3" }
    }
  }
]

db.products.bulkWrite(operations)

In the above code, we performed three operations in a single operation: inserting a new document, updating the price of the product with the name “Product 2” to 200, and deleting the document for the product with the name “Product 3”.

Conclusion

The bulkWrite() method allows for the execution of multiple MongoDB commands, including insert, update, replace, and delete operations, in a single operation. This method can improve the efficiency of database operations, reduce network requests, and reduce server load.