MongoDB: Объединение запросов с bulkWrite

В этом руководстве рассматривается объединение различных запросов в MongoDB для обновления, удаления и добавления данных в одной операции.

Объединение операций с данными

Для объединения нескольких команд используется функция bulkWrite. Она принимает массив команд, каждая из которых представлена отдельным объектом. Рассмотрим пример работы с коллекцией users. Предположим, что коллекция уже содержит несколько записей (конкретные данные не важны).

Добавление объектов (insertOne)

Для добавления нового объекта используется команда insertOne. Каждый объект команды содержит поле document с данными нового документа. Пример:

{
  "insertOne": {
    "document": {
      "name": "Mike",
      "age": 45,
      "email": "mike@test.ru"
    }
  }
}

Для добавления нескольких объектов необходимо добавить несколько объектов insertOne в массив команд.

Удаление объектов (deleteOne)

Для удаления объекта используется команда deleteOne. Необходимо указать фильтр (filter), определяющий удаляемый документ. Пустой фильтр удалит все документы. Пример:

{
  "deleteOne": {
    "filter": {
      "age": 20
    }
  }
}

Этот код удалит запись, где поле age равно 20.

Обновление объектов (updateOne)

Для обновления объекта используется команда updateOne. Необходимо указать фильтр (filter) для выбора объекта и обновление (update) с помощью оператора $set. Пример обновления поля email объекта с именем «Mike»:

{
  "updateOne": {
    "filter": {
      "name": "Mike"
    },
    "update": {
      "$set": {
        "email": "new_email@robot.com"
      }
    }
  }
}

updateOne обновляет только один объект, соответствующий фильтру. Для обновления нескольких объектов используйте updateMany.

Замена объектов (replaceOne)

Для замены объекта используется команда replaceOne. Необходимо указать фильтр (filter) для выбора объекта и новый документ (replacement). Пример:

{
  "replaceOne": {
    "filter": {
      "name": "John"
    },
    "replacement": {
      "name": "John",
      "age": 45,
      "email": "john@mail.ru"
    }
  }
}

Этот код заменит объект с именем «John» новым документом.

Пример объединенного запроса

Объединим все команды в одном запросе с использованием bulkWrite:

db.users.bulkWrite([
  { "insertOne": { "document": { "name": "Mike", "age": 45, "email": "mike@test.ru" } } },
  { "deleteOne": { "filter": { "age": 20 } } },
  { "updateOne": { "filter": { "name": "Mike" }, "update": { "$set": { "email": "new_email@robot.com" } } } },
  { "replaceOne": { "filter": { "name": "John" }, "replacement": { "name": "John", "age": 45, "email": "john@mail.ru" } } }
])

После выполнения этого запроса в базе данных будут выполнены указанные операции.

Функция bulkWrite позволяет эффективно выполнять несколько операций с базой данных MongoDB в одном запросе, что повышает производительность, особенно при пакетных операциях. Фильтры обеспечивают точный контроль над обрабатываемыми документами.

Что будем искать? Например,программа