Создание документов в MongoDB
Введение
MongoDB — это документо-ориентированная NoSQL база данных. Данные хранятся в виде документов (структурированных JSON-подобных объектов) внутри коллекций. Например, данные каждого клиента представляют собой отдельный документ, а все документы клиентов собраны в коллекцию customers.
В этой статье вы научитесь создавать документы: от простых insertOne и insertMany до советов по обработке ошибок и альтернатив.
Операции создания в 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.
- При ошибке (например, нарушение уникального индекса) операция вернёт ошибку.
Вы можете явно задать _id, например _id: “customer-123”. В этом случае нужно следить за уникальностью значений.
insertMany
insertMany позволяет вставить несколько документов за один вызов. Корректный синтаксис использует массив объектов:
db.collection('customers').insertMany([
{ name: "Roy Williams", age: 21 },
{ name: "James Brown", age: 38 },
{ name: "Jessica Jones", age: 25 }
])Опции:
- ordered (по умолчанию true) — вставка выполняется последовательно; при ошибке вставка останавливается.
- ordered: false — MongoDB попытается вставить все документы и вернёт информацию о тех, которые не удалось вставить.
Когда insertMany не сработает:
- Дублирование _id или нарушение уникальных индексов приводит к ошибке DuplicateKey.
- Превышение ограничений BSON по размеру документа или запроса.
Частые ошибки и их обработка
Важно:
- Проверяйте уникальные индексы перед массовой вставкой.
- Для больших пакетов используйте пакетную обработку — разбивайте массивы на чанки.
- Логируйте возвраты ошибок и результаты вставки (insertedCount, insertedIds).
Пример обработки вставки с опцией ordered: false:
const result = await db.collection('customers').insertMany(docs, { ordered: false })
console.log(result.insertedCount, result.insertedIds)Альтернативы и расширенные подходы
- bulkWrite — для комбинированных операций (insertOne, updateOne, deleteOne и т.д.) в одном запросе. Удобно для сложных миграций и массовых изменений.
- Транзакции — если нужна атомарность между несколькими коллекциями, используйте сессии и транзакции (требуется репликация или шардинг).
Пример простого bulkWrite:
db.collection('customers').bulkWrite([
{ insertOne: { document: { name: "A", age: 30 } } },
{ updateOne: { filter: { name: "B" }, update: { $set: { age: 40 } } } }
])Ментальные модели и эвристики
- Подумайте о коллекции как о таблице, а о документе как о строке с гибкой схемой.
- Для мелких частых вставок используйте insertOne; для пакетной загрузки больших объёмов — insertMany с разбивкой на чанки.
- Если требуется комбинировать типы операций — bulkWrite.
Факт-бокс: ключевые моменты
- Количество операций создания: 2 (insertOne, insertMany).
- Автогенерация идентификатора: MongoDB добавляет ObjectId в поле _id при отсутствии значения.
- ordered: true по умолчанию; ordered: false позволяет продолжить вставку при ошибках отдельных документов.
Ролевые чек-листы
Разработчик:
- Подготовить документ с нужными полями.
- Проверить валидацию на уровне приложения.
- Обрабатывать результат операции (insertedId/insertedCount).
Администратор БД:
- Настроить индексы и проверки схемы (JSON Schema validator), чтобы предотвратить некорректные вставки.
- Следить за размерами коллекций и лимитами BSON.
DevOps:
- Планировать резервное копирование перед массовыми миграциями.
- Настроить мониторинг операций записи и задержек.
Когда вставка не подходит — альтернативы
- Если требуется трансакционность между коллекциями — используйте транзакции.
- Для смешанных изменений (вставка + обновление) используйте bulkWrite.
- Для потоковой загрузки данных рассмотрите Kafka/Stream + батчи в MongoDB.
Короткий список приёмов по безопасности и устойчивости
- Не храните чувствительные данные в явном виде; применяйте шифрование на уровне приложения или Field Level Encryption.
- Ограничьте права на вставку через роли и привилегии MongoDB.
- Используйте writeConcern, чтобы контролировать подтверждение записи.
Краткий глоссарий
- Документ — единица данных в MongoDB, JSON-подобный объект.
- Коллекция — группа документов.
- ObjectId — стандартный уникальный идентификатор, создаваемый MongoDB.
- bulkWrite — API для пакетных комбинированных операций.
Примеры тест-кейсов для приёмки
- Вставка одного корректного документа — ожидается insertedId и insertedCount = 1.
- Вставка нескольких корректных документов через insertMany — ожидается insertedCount = N.
- Вставка с дублирующим _id — ожидается ошибка DuplicateKey.
- insertMany с ordered: false при частичных ошибках — ожидается частичная вставка и список ошибок.
Заключение
Создание документов в MongoDB — базовая и часто используемая операция. Для простых случаев достаточно insertOne и insertMany. Для продвинутых сценариев применяйте ordered:false, bulkWrite и транзакции. Всегда учитывайте индексы, ограничения схемы и требования к отказоустойчивости.
Важно: логируйте результаты вставок и обрабатывайте ошибки — это уменьшит риск потери данных и облегчит диагностику.
Краткое резюме
- insertOne — для единичных документов.
- insertMany — для пакетов документов; используйте массив и опции ordered.
- bulkWrite и транзакции — для сложных или атомарных сценариев.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone