В разделе про PostgreSQL данные жили в таблицах: строки, колонки, ключи и JOIN между ними. Этот раздел про другой способ хранить данные. MongoDB не раскладывает информацию по таблицам, а хранит её целыми документами. Первый урок отвечает на два вопроса: что такое документ и когда такой способ лучше таблиц, а когда хуже.
Папка с делом против картотеки
Представь отдел кадров, который хранит сведения о сотрудниках двумя способами.
Первый способ это картотека. В одном ящике карточки с именами, в другом карточки с адресами, в третьем список прошлых мест работы. На каждой карточке номер сотрудника. Чтобы собрать всё про одного человека, ты открываешь три ящика и сводишь карточки по номеру. Так устроена реляционная база: таблицы и JOIN.
Второй способ это папка с делом. На каждого сотрудника своя папка, и внутри лежит всё сразу: анкета, адрес, история работы. Достал папку, и вся информация у тебя в руках. Так устроена документоориентированная база.
Документоориентированная база данных хранит каждую запись целым объектом со всеми вложенными деталями. MongoDB самая известная из таких баз.
Как выглядит документ
Возьмём книгу из интернет-магазина. В PostgreSQL мы раскладывали бы её по трём таблицам: книги, авторы и метки, плюс связующая таблица между книгами и метками. В MongoDB книга это один документ:
{
title: 'Мастер и Маргарита',
author: { name: 'Булгаков', country: 'Россия' },
tags: ['классика', 'мистика'],
price: 690
}
Если ты писал на JavaScript, запись знакомая: это объект. Внутри него есть вложенный объект author и список tags. В реляционной модели такое значение нарушило бы первую нормальную форму, а здесь это обычное дело.
Документ похож на JSON, но хранится в двоичном формате BSON. BSON различает целые и дробные числа и умеет хранить даты, а в обычном JSON таких типов нет. Подробнее о типах поговорим в следующем уроке.
Документы одного вида лежат в коллекции. Коллекция похожа на таблицу, только не заставляет все документы иметь одинаковые поля.
урок из курса
Урок из курса «MongoDB с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.