MongoDB: что это за база данных, как установить и настроить СУБД
С ростом сложности и масштабов приложений компании ищут альтернативу традиционным реляционным базам данных. Ей может стать MongoDB — NoSQL-СУБД, которая предлагает другой подход к хранению и обработке информации. Разберем принципы ее работы, процесс установки и настройки.

- Что такое MongoDB
- Подготовка к установке MongoDB на разные операционные системы
- Первоначальная настройка и запуск MongoDB
- Базовое администрирование и работа с оболочкой mongo shell
- Настройка безопасности и аутентификации в MongoDB
- Резервное копирование и восстановление данных
- Графические инструменты для управления MongoDB
- Интеграция MongoDB с приложениями: драйверы и ODM
- Типичные проблемы при установке и настройке
- Дальнейшие шаги: шардинг, репликация, облачные сервисы
- Заключение
Что такое MongoDB
MongoDB — это система управления базами данных. Она принадлежит классу NoSQL и подходит для работы с документами. Если в реляционных базах данных информация хранится в таблицах со строгой структурой, то MongoDB использует документы в формате BSON — двоичной кодировке JSON. Такой подход полезен в работе с разнообразной информацией.
Документы в MongoDB могут содержать разные наборы полей, что позволяет хранить сложные объекты. Данные группируются в аналоги таблиц — коллекции, которые не требуют одинаковой структуры для всех записей. Это помогает в разработке приложений, поскольку можно ускорить внесение изменений в процессе.
MongoDB подходит для высоконагруженных систем, веб-приложений и сервисов, которые быстро работают и масштабироваться. СУБД поддерживает горизонтальное масштабирование, поэтому можно распределять данные между несколькими серверами и работать с большими объемами информации.
Схема СУБД
Отличия от реляционных баз данных
Выбор между MongoDB и реляционной базой будет зависеть от ваших задач. Сравним подходы, чтобы понять сильные и слабые стороны.
Параметр | MongoDB (NoSQL) | Реляционные базы данных (SQL) |
Модель данных | Документоориентированная, данные в формате BSON | Таблицы со строгой структурой данных |
Структура | Гибкая, документы с разными полями | Определенная схема для всех записей |
Связи между данными | Связи внутри документов | Внешние ключи для связи между таблицами |
Масштабирование | Горизонтальное путем распределения данных между серверами | Вертикальное путем наращивания ресурсов одного сервера |
Производительность | Высокая при работе с большими объемами данных и регулярных запросах | Высокая при транзакциях |
Транзакции | Полноценная поддержка multi-document ACID-транзакций (с версии 4.0 для реплика-сетов, с 4.2 для шардированных кластеров) | ACID-транзакции |
Использование | Веб-приложения, микросервисы и приложения | Банковские и бухгалтерские системы и ERP |
Основные компоненты архитектуры: mongod, mongos, конфиг-серверы
Архитектура распределенного (шардированного) кластера MongoDB включает три ключевых компонента. При этом для standalone-инсталляции или реплика-сета используется только mongod.
mongod — основной процесс, который отвечает за хранение и обработку данных. Он работает с коллекциями и документами, управляет задачами сервера MongoDB, такими, как прием запросов и отправку ответов.
mongos — маршрутизатор запросов, который используется в шардированных (распределенных) кластерах. Он получает запросы от приложений и направляет их к серверам mongod, где хранятся нужные данные. Для клиента mongos выглядит как обычный сервер MongoDB.
Конфигурационные серверы (config servers) — хранилища информации о структуре шардированного кластера. Они содержат данные о распределении коллекций и шардов, правилах перенаправления запросов. Mongos обращается к ним, чтобы определить, куда направить запрос.
Основное назначение конфигурационных серверов — хранение метаданных шардированного кластера. Как правило, они не хранят пользовательские данные, но в некоторых специфических сценариях хранения данных на config servers возможно.
Подготовка к установке MongoDB на разные операционные системы
Для установки MongoDB нужна 64-битная ОС с поддержкой x86_64 или ARM64. Требования к оперативной памяти зависят от объема данных и рабочей нагрузки. Для работы необходим достаточный объем RAM для кеша storage engine (WiredTiger). Для разработки может хватить 1-2 ГБ, для рабочих нагрузок рекомендуется от 4 ГБ и более. Ключевым является настройка размера кеша WiredTiger.
Требование актуально для последних версий MongoDB Community Edition. Для получения точной информации о поддерживаемых платформах обратитесь к официальной документации по поддержке платформ.
Установка MongoDB Community Edition на Ubuntu и Debian
Перед установкой необходимо добавить официальный репозиторий MongoDB в систему. Сперва импортируйте GPG-ключ:
Добавьте репозиторий (для Ubuntu 22.04/Jammy):
Обновите списки пакетов:
Установите MongoDB:
Загрузите конфигурацию службы systemd:
Установка на CentOS и RHEL
Настройте репозиторий YUM с официальными пакетами MongoDB. Это позволит установить службу одной командой через менеджер пакетов.
Служба запускается командой:
Для автоматического запуска при загрузке ОС выполните:
Установка MongoDB на Windows через MSI-установщик
Загрузите MSI-установщик MongoDB Community Server с официального сайта. Запустите файл mongodb-windows-x86_64.msi. Выберите в мастере установки Complete или Custom. Можете в настройках отметить, чтобы MongoDB установилась как служба Windows. Для проверки работы выполните команду mongod --version.
Быстрый старт с Docker-контейнером MongoDB
Запустить MongoDB в Docker можно одной командой:
Этот вариант подойдет, если не хотите устанавливать MongoDB в операционную систему. После запуска в Docker база данных будет доступна на стандартном порту.
Первоначальная настройка и запуск MongoDB
После установки MongoDB запускается и управляется как системная служба. Для старта используйте команду sudo systemctl start mongod, для автоматического запуска при загрузке системы — sudo systemctl enable mongod.
Проверка статуса работы сервера и логов
Чтобы убедиться, что MongoDB нормально работает, выполните команду sudo systemctl status mongod. Возникающие проблемы можно отслеживать в журналах сервера, которые хранятся в каталоге /var/log/mongodb/. Туда записываются все данные о запуске и остановке службы, сбоях и ошибках.
Файл конфигурации
Файл конфигурации MongoDB расположен здесь — /etc/mongod.conf. В нем можно настроить сетевой порт, расположение логов и данных, критерии безопасности и другие параметры службы.
Базовое администрирование и работа с оболочкой mongo shell
Для подключения к службе через mongo shell используйте актуальную команду mongosh вместо устаревшей mongo. Чтобы проверить версию сервера и клиента, примените db.version.
Команды mongo shell: CRUD-операции
CRUD-операции — основа работы приложений, которые взаимодействуют с базами данных. Аббревиатура CRUD складывается из первых букв Create, Read, Update и Delete (создание, чтение, обновление и удаление). Примеры команд:
создание или выбор существующей базы данных — use mydatabase;
создание коллекции и вставка документа — db.users.insertOne({name: "John", age: 30});
поиск документа — db.users.find(), например, db.users.findOne({age: {$gt: 25}});
обновление документа — db.users.updateOne({name: "John"}, {$set: {age: 31}});
удаление документа — db.users.deleteOne({name: "John"}).
Чтобы команды работали, подставляйте свои названия баз данных, коллекций и значения полей в документах.
Создание индексов для ускорения поиска
Чтобы быстрее искать данные без необходимости просматривать все документы в коллекции, используйте индексы. Они позволяют находить документы по конкретному полю.
Тип | Команда | Описание |
Одиночный | db.users.createIndex({ email: 1 }) | Быстрый поиск по одному полю. В примере — по email |
Комплексный | db.users.createIndex({ lastName: 1, firstName: 1 }) | Поиск по нескольким полям |
Уникальные | db.users.createIndex({ email: 1 }, { unique: true }) | Гарантия уникальности значений в индексируемом поле (или комбинации полей) для всех документов коллекции |
TTL | db.sessions.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 }) | Автоматическое удаление устаревших записей |
Текстовый | db.posts.createIndex({ title: "text", body: "text" }) | Полнотекстовый поиск |
Геопространственный | db.places.createIndex({ location: "2dsphere" }) | Поиск по географическим координатам |
В примерах для скалярных полей (email, lastName и др.) значение `1` указывает на сортировку по возрастанию, `-1` — по убыванию. Для специальных типов индексов (текстовых, геопространственных) используются другие спецификаторы ("text", "2dsphere").
Создавайте индексы по тем полям, которые часто используете для поиска. Не делайте лишних, чтобы не замедлять запись данных.
Настройка безопасности и аутентификации в MongoDB
Если не изменить настройки, служба MongoDB будет доступна без контроля доступа. Это может привести к утечке и потере данных. Рассказываем, что предпринять.
Включение контроля доступа в конфигурационном файле
Внесите изменения в конфигурационный файл mongod.conf. Добавьте параметр:
После изменений перезапустите службу командой sudo systemctl restart mongod.
MongoDB начнет запрашивать логин и пароль. Подключение без аутентификации будет запрещено.
Создание первого пользователя-администратора
Этот шаг можно сделать до предыдущего либо локально подключиться к MongoDB с правами администратора.
В mongo shell выполните команду:
Созданный пользователь получит полные административные права и сможет управлять другими пользователями, создавать и удалять базы данных, настраивать индексы, администрировать серверы.
Аутентификация при подключении к shell
Как только вы выставите в настройках необходимость авторизации, подключаться без логина не получится. Будет работать команда для подключения с аутентификацией:
Здесь -u — имя пользователя, -p — пароль, --authenticationDatabase admin — база, к которой привязан пользователь. Если верно указать все параметры, доступ к службе будет предоставлен.
Настройка брандмауэра для доступа к порту 27017
MongoDB по умолчанию работает на порте 27017. Если служба используется в продакшене, нельзя оставлять его открытым.
Можно разрешить доступ только с доверенных IP либо полностью запретить внешний доступ. Пример настроек брандмауэра ufw на Ubuntu для разрешения доступа только с доверенного IP:
По умолчанию UFW блокирует все входящие соединения, поэтому явный deny для порта 27017 не требуется.
Резервное копирование и восстановление данных
Чтобы восстановить данные при сбое службы, ошибке или переносе на другой сервер, позаботьтесь о резервном копировании. Подсказываем эффективные методы.
Создание дампа базы данных
Чтобы создать копию базы со всеми коллекциями и документами, примените команду (в примере — база mydatabase):
Пользуйтесь этим методом перед предстоящими обновлениями и миграциями.
Восстановление базы данных из дампа
Чтобы восстановить базу из резервной копии и при необходимости перезаписать данные, применяйте команду:
Команда полезна при переносе БД на другой сервер, потере данных из основной базы, восстановлении после ошибок.
Графические инструменты для управления MongoDB
Графические инструменты нужны, если вы не хотите постоянно пользоваться командной строкой. Официальный клиент службы — MongoDB Compass. Его можно установить с официального сайта MongoDB. Он удобен для новичков. Позволяет подключаться к локальным и удаленным БД, смотреть коллекции и документы, управлять индексами, анализировать структуру содержимого базы.
Из сторонних инструментов можно рассмотреть Robo 3T (Studio 3T) и NoSQLBooster. Robo 3T имеет простой интерфейс и встроенную Mongo shell. Он подойдет для повседневной работы с базами данных.
NoSQLBooster имеет GUI и встроенный редактор запросов. Может автоматически дополнять команды MongoDB. Подойдет для разработчиков.

Интеграция MongoDB с приложениями: драйверы и ODM
Для Node.js используется официальный драйвер mongodb. Он обеспечивает прямой доступ к базе данных, позволяет выполнять CRUD-операции и работать с коллекциями. Этот драйвер подойдет, если вам важен полный контроль над запросами.
Можно использовать ODM Mongoose. Он позволяет работать с моделями и связями, определять схемы данных. Этот инструмент упрощает разработку, подходит для крупных приложений.
Для Python есть официальный драйвер PyMongo, для Java — MongoDB Java Driver. А для PHP существует официальный драйвер (PECL-расширение `mongodb`) и построенная на его основе библиотека (MongoDB PHP Library), которая предоставляет удобный объектно-ориентированный API и является рекомендуемым способом взаимодействия.
Типичные проблемы при установке и настройке
Проблема | Причина | Способ решения |
Ошибки, связанные с правами доступа к директории данных | Неверно указан владелец либо нет прав на каталог с данными MongoDB | Настроить владельца и права для пользователя mongod. Примеры команд: sudo chown -R mongod:mongod /var/lib/mongo и sudo chmod 755 /var/lib/mongo |
Проблемы с запуском из-за занятого порта | Порт занят другим процессом | Найти процесс с помощью sudo lsof -i :27017 или sudo netstat -tulpn | grep 27017 и остановить его либо изменить порт в конфигурации службы |
Ошибки аутентификации | Неверно настроенный механизмы аутентификации либо у пользователя нет достаточных прав | Проверить настройки аутентификации, убедиться в корректности ролей пользователя и прав доступа |
Сложность масштабирования и обеспечения отказоустойчивости | Ручная настройка репликации и шардинга требует экспертизы и времени | Рассмотреть использование управляемых облачных баз данных, таких как Evolution Managed PostgreSQL, которые автоматизируют развёртывание, резервное копирование и мониторинг |
Дальнейшие шаги: шардинг, репликация, облачные сервисы
С ростом объема данных систему можно масштабировать. Есть три способа.
Репликация (Replica Set)
Replica Set — это группа MongoDB-серверов, хранящих копии одинаковых записей. Один (primary) принимает записи, остальные (secondary) содержат реплики данных. Если главный сервер выходит из строя, можно переключиться на другие, ничего не теряя. Такой подход позволяет обеспечить отказоустойчивость и доступность данных.
Горизонтальное масштабирование: шардинг (Sharding)
Sharding — способ горизонтально масштабировать MongoDB путем разделения данных между несколькими экземплярами mongod, объединенными в шарды (shards). Каждый шард должен быть развернут как реплика-сет (Replica Set) для обеспечения отказоустойчивости. Чтобы определить, где хранятся конкретные документы, используется ключ shard key.
Такой подход позволяет работать с большими объемами данных, увеличивать пропускную способность, автоматически маршрутизировать запросы к нужному серверу.
Использование облачного сервиса MongoDB Atlas
Для развертывания и масштабирования MongoDB можно также использовать виртуальные серверы (VPS/VDS) у любых облачных провайдеров или сразу обратиться к готовым управляемым решениям. К таким решениям относится Advanced Document Database Service with MongoDB от Cloud.ru — документоориентированная БД, полностью совместимая с MongoDB. Сервис позволяет запускать кластеры в конфигурациях Replica Set и Cluster (с поддержкой шардинга), берет на себя задачи администрирования, автоматического резервного копирования и обеспечивает высокий уровень доступности. Это может быть удобным выбором для проектов, предпочитающих работать с отечественными облачными платформами.
Также существует глобальный управляемый сервис MongoDB Atlas от разработчика самой СУБД. С его помощью можно автоматически настраивать репликацию и шардинг, осуществлять резервное копирование и мониторинг.
Atlas позволяет быстро начать работу с MongoDB без администрирования серверов. MongoDB Atlas развертывается и работает в инфраструктуре ведущих публичных облачных провайдеров: AWS, Google Cloud Platform и Microsoft Azure.
Заключение
MongoDB делает акцент на обработке разнородных данных и горизонтальном масштабировании. СУБД будет полезна быстрорастущих проектов и микросервисной архитектуре. Главные преимущества в быстром старте и развитии за счет кластеризации и использования облачной инфраструктуры.
