В этом руководстве рассматривается объединение различных запросов в 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 в одном запросе, что повышает производительность, особенно при пакетных операциях. Фильтры обеспечивают точный контроль над обрабатываемыми документами.