Раздел 36 · MongoDB с нуля

Что такое документоориентированная БД

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

В разделе про PostgreSQL данные жили в таблицах: строки, колонки, ключи и JOIN между ними. Этот раздел про другой способ хранить данные. MongoDB не раскладывает информацию по таблицам, а хранит её целыми документами. Первый урок отвечает на два вопроса: что такое документ и когда такой способ лучше таблиц, а когда хуже.

Папка с делом против картотеки

Представь отдел кадров, который хранит сведения о сотрудниках двумя способами.

Первый способ это картотека. В одном ящике карточки с именами, в другом карточки с адресами, в третьем список прошлых мест работы. На каждой карточке номер сотрудника. Чтобы собрать всё про одного человека, ты открываешь три ящика и сводишь карточки по номеру. Так устроена реляционная база: таблицы и JOIN.

Второй способ это папка с делом. На каждого сотрудника своя папка, и внутри лежит всё сразу: анкета, адрес, история работы. Достал папку, и вся информация у тебя в руках. Так устроена документоориентированная база.

Документоориентированная база данных хранит каждую запись целым объектом со всеми вложенными деталями. MongoDB самая известная из таких баз.

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

Возьмём книгу из интернет-магазина. В PostgreSQL мы раскладывали бы её по трём таблицам: книги, авторы и метки, плюс связующая таблица между книгами и метками. В MongoDB книга это один документ:

{
  title: 'Мастер и Маргарита',
  author: { name: 'Булгаков', country: 'Россия' },
  tags: ['классика', 'мистика'],
  price: 690
}

Если ты писал на JavaScript, запись знакомая: это объект. Внутри него есть вложенный объект author и список tags. В реляционной модели такое значение нарушило бы первую нормальную форму, а здесь это обычное дело.

Документ похож на JSON, но хранится в двоичном формате BSON. BSON различает целые и дробные числа и умеет хранить даты, а в обычном JSON таких типов нет. Подробнее о типах поговорим в следующем уроке.

Документы одного вида лежат в коллекции. Коллекция похожа на таблицу, только не заставляет все документы иметь одинаковые поля.

урок из курса

Урок из курса «MongoDB с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.