Гид по технологиям

Создание документов в MongoDB

5 min read Базы данных Обновлено 31 Dec 2025
Создание документов в MongoDB
Создание документов в MongoDB

Серверы хранения данных

MongoDB — это документоориентированная NoSQL база данных. Данные хранятся в виде документов BSON (поддерживают вложенные объекты) и объединяются в коллекции. Например, профиль каждого клиента обычно хранится в отдельном документе, а все профили — в коллекции customers.

Операции создания в MongoDB

В MongoDB есть две основные операции для создания документов: insertOne() и insertMany(). Обе работают с одной коллекцией за один вызов. Вы можете вставлять один документ или сразу несколько.

Структура вызова общая для обеих операций:

// Пример структуры
db.collection.createOperation()

Здесь db — ваша база данных, collection — имя коллекции, а createOperation() заменяется на insertOne() или insertMany().

Использование insertOne()

insertOne() вставляет один документ в указанную коллекцию. Простой пример:

db.collection('customers').insertOne({
  name: "Sarah Wilson",
  age: 22
})

Поведение при вставке:

  • Если коллекция не существует, MongoDB создаст её автоматически и добавит документ.
  • Если вставка не удалась, операция вернёт ошибку.
  • Если вы не указали поле _id, MongoDB автоматически сгенерирует уникальный ObjectId для документа.

Важно: при необходимости вы можете задать собственное значение _id. Это полезно, если вы хотите использовать внешний идентификатор или UUID:

db.collection('customers').insertOne({
  _id: "client-123",
  name: "Alex",
  age: 30
})

Замечание: ObjectId по умолчанию — 12-байтовый идентификатор, представляемый в виде 24 шестнадцатеричных символов.

Использование insertMany()

insertMany() позволяет вставить несколько документов за один вызов. Пример корректного синтаксиса:

db.collection('customers').insertMany([
  { name: "Roy Williams", age: 21 },
  { name: "James Brown", age: 38 },
  { name: "Jessica Jones", age: 25 }
])

Ключевые особенности insertMany():

  • Создаёт коллекцию, если её нет.
  • Возвращает ошибку, если вставка не удалась (поведение зависит от опции ordered).
  • При необходимости можно использовать опции, например { ordered: false } — тогда MongoDB попытается вставить все документы, даже если некоторые вызовут ошибки.

Пример с опциями:

db.collection('customers').insertMany([
  { name: "A", age: 20 },
  { name: "B", age: 25 }
], { ordered: false })

Если вы ожидаете частичные ошибки (например, дубликаты _id в наборе), ordered: false позволяет продолжить вставку остальных документов.

Параметры и обработка ошибок

  • ordered: true по умолчанию — при первой ошибке вставка остановится.
  • ordered: false — операция попытается вставить все документы; вернётся информация о частичных ошибках.
  • MongoDB возвращает подробный объект результата с количеством вставленных документов и сгенерированными _id.
  • В средах с драйверами (Node.js, Python, Java и т.д.) ошибки будут представлены в виде исключений/ошибок драйвера (например, BulkWriteError для пакетных операций).

Когда insertMany() не подходит и альтернативы

  • Если нужно атомарно изменить несколько коллекций — используйте транзакции (multi-document transactions доступны в репликационных наборах и кластерах с поддержкой транзакций).
  • Для сложных пакетных сценариев с разными типами операций (вставка, обновление, удаление) используйте bulkWrite(), который позволяет комбинировать различные операции.
  • Если нужна строгая реляционная целостность и связи между таблицами — рассмотрите реляционную СУБД.

Эвристики и лучшие практики

  • Используйте insertOne() для единичных вставок (например, запись действия пользователя).
  • Для загрузки большого объёма данных группируйте документы в батчи и используйте insertMany().
  • При массовых вставках контролируйте размер пакета: слишком большой пакет может потребовать много памяти; слишком маленький — снизит пропускную способность.
  • Для устойчивости к ошибкам применяйте ordered: false и логирование ошибок.
  • Валидируйте структуру документа на клиенте или с помощью схемы (JSON Schema в MongoDB) перед вставкой.

Мини-методология вставки данных (шаблон процесса)

  1. Валидация: проверьте шаблон документа и обязательные поля.
  2. Трансформация: конвертируйте форматы дат, чисел и др.
  3. Батчинг: сформируйте массив для insertMany() по размеру и по логическим группам.
  4. Вставка: выполните insertMany() с подходящими опциями.
  5. Обработка результатов: зафиксируйте успехи и ошибки, повторите при необходимости.
  6. Мониторинг: следите за метриками write latency и количеством ошибок.

Ролевая чек-лист

Разработчик:

  • Проверить схему документа.
  • Выбрать insertOne или insertMany.
  • Обработать возможные ошибки драйвера.

DBA / Администратор БД:

  • Настроить write concern и репликацию.
  • Контролировать размер коллекций и индексов.

DevOps:

  • Обеспечить мониторинг задержек записи и нагрузки.
  • Настроить резервное копирование и восстановление.

Критерии приёмки

  • Документ успешно появляется в коллекции.
  • Поле _id присутствует и уникально для коллекции.
  • Для insertMany() — количество вставленных документов соответствует ожидаемому (с учётом допустимых ошибок при ordered: false).
  • Журналы ошибок содержат детальную информацию о неудачных вставках.

Факторы и ограничения

  • MongoDB автоматически генерирует поле _id при отсутствии явного значения.
  • Максимальный размер BSON-документа в MongoDB — 16 МБ. Если документ больше, требуется разбиение на несколько документов или хранение больших объектов в GridFS.

Короткий словарь

  • Документ — единица данных в MongoDB (аналог строки в реляционной БД).
  • Коллекция — набор документов (аналог таблицы).
  • ObjectId — уникальный идентификатор документа, создаваемый MongoDB.
  • write concern — настройка подтверждения записи для надёжности.

Тестовые сценарии и примеры приёмки

  1. Вставка одного документа:
  • Вход: insertOne({ name: “T” })
  • Ожидаемо: документ добавлен, возвращён _id
  1. Вставка нескольких документов упорядоченно:
  • Вход: insertMany([ … ], { ordered: true })
  • Ожидаемо: либо все вставлены, либо операция остановлена на ошибке
  1. Массовая вставка с частичными ошибками:
  • Вход: insertMany([ … ], { ordered: false })
  • Ожидаемо: частично вставлены, ошибки задокументированы

Краткое резюме

Создание документов в MongoDB — базовая и часто используемая операция. Выбирайте insertOne() для единичных операций и insertMany() для батчевых вставок. Учитывайте порядок вставки, обработку ошибок и ограничения по размеру документа.

Важно: для сложных сценариев модификации нескольких коллекций используйте транзакции или bulkWrite(), а для больших файлов — GridFS.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как выбрать игровую гарнитуру — руководство
Аксессуары

Как выбрать игровую гарнитуру — руководство

Продлить заряд DualSense: советы для PS5
Гейминг

Продлить заряд DualSense: советы для PS5

Live Captions на Mac: включение, настройка и советы
macOS

Live Captions на Mac: включение, настройка и советы

Автовключение, перезагрузка и выключение Mac
macOS

Автовключение, перезагрузка и выключение Mac

Как выйти из бета macOS Ventura
macOS

Как выйти из бета macOS Ventura

Установить старую macOS на MacBook или iMac
macOS

Установить старую macOS на MacBook или iMac