MongoDB

Документная NoSQL-база данных: хранит записи как гибкие JSON-подобные документы, а не строки таблиц со строгой схемой.

MongoDB — документная база данных из семейства NoSQL. Вместо таблиц со строками и заранее заданными столбцами она хранит документы — записи в формате, похожем на JSON. Документы одной коллекции могут иметь разный набор полей, а связанные данные можно хранить прямо внутри документа. Первая версия вышла в 2009 году.

Как выглядит документ

Заказ в коллекции orders (формат JSON):

{
  "_id": "665f1c...",
  "number": 1042,
  "status": "paid",
  "client": { "name": "ООО Ромашка", "inn": "7700000000" },
  "items": [
    { "sku": "A-17", "qty": 2, "price": 3500 },
    { "sku": "B-03", "qty": 1, "price": 9000 }
  ]
}

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

// MongoDB Shell (JavaScript)
db.orders.find({ status: "paid" })

Сильные стороны

  • Гибкая схема. Новые поля добавляются без изменения структуры базы — удобно, когда формат данных часто меняется: анкеты, каталоги с разными характеристиками товаров, журналы событий.
  • Данные «как в коде». Документ похож на объект в программе, и вложенные структуры не нужно собирать из таблиц.
  • Масштабирование. Встроенные репликация (наборы реплик) и шардинг для распределения данных по серверам.
  • Агрегации. Конвейер обработки (aggregation pipeline) для группировок и расчетов внутри базы.

Ограничения

  • Связи. Если данные сильно связаны между собой (клиенты, договоры, платежи, проводки), реляционная база с JOIN и внешними ключами надежнее и проще.
  • Транзакции. Транзакции по нескольким документам появились только в версии 4.0 (2018) и дороже, чем в реляционных СУБД; модель MongoDB рассчитана на то, что большинство операций затрагивает один документ. Подробнее о гарантиях — в термине ACID.
  • Дисциплина схемы. Гибкость оборачивается беспорядком, если не договориться о структуре документов и не включить их проверку.
  • Лицензия. С 2018 года сервер MongoDB распространяется по лицензии SSPL, которую не признают открытой; это стоит учитывать при выборе для государственных и корпоративных проектов.

MongoDB или PostgreSQL

Для учетных и финансовых систем, где важны целостность и сложные отчеты, обычно выбирают PostgreSQL — к тому же он умеет хранить JSON-документы в колонках jsonb. MongoDB уместна, когда данные по природе документные, слабо связаны между собой и часто меняют форму, а объемы требуют горизонтального масштабирования.