Документы, коллекции и базы
Три уровня хранения в MongoDB и как они соотносятся с привычными таблицами и строками.
Коллекция — это группа документов, аналог таблицы; документ — отдельная запись, аналог строки; база — контейнер коллекций.
Документ — атом хранения
Документ — это набор пар «поле — значение». Внешне он выглядит как объект JSON. Значением может быть число, строка, булево, дата, массив, вложенный объект или специальный тип вроде ObjectId.
{
"title": "Властелин колец",
"year": 1954,
"inStock": true,
"tags": ["fantasy", "classic"],
"author": { "name": "Толкин", "country": "UK" }
}BSON: как это хранится на самом деле
В файлах MongoDB хранит документы не как текстовый JSON, а в бинарном формате BSON (Binary JSON). BSON компактнее, быстрее обходится машиной и, что важно, поддерживает типы, которых нет в чистом JSON: Date, ObjectId, Decimal128, бинарные данные. Вы пишете запросы в привычном JSON-синтаксисе, а движок работает с BSON — об этом переводе можно не думать.
Коллекция — группа документов
Документы одного смысла лежат в коллекции: пользователи в users, заказы в orders. В отличие от таблицы, коллекция не требует, чтобы все документы имели одинаковые поля — у одного пользователя может быть телефон, у другого нет. Коллекция создаётся автоматически при первой вставке, объявлять её заранее не нужно.
База данных — контейнер коллекций
На верхнем уровне находится база данных. Один сервер MongoDB может держать много баз, в каждой — свои коллекции. Переключиться на базу в консоли просто:
use shopЕсли базы shop ещё нет, она появится в момент первой записи. Та же логика, что с коллекциями: ничего не создаётся «вхолостую».
Соответствие реляционным понятиям
Эта таблица — главная шпаргалка для перехода с SQL:
| Реляционная БД | MongoDB |
| База данных (database) | База данных (database) |
| Таблица (table) | Коллекция (collection) |
| Строка (row) | Документ (document) |
| Столбец (column) | Поле (field) |
| Первичный ключ (PRIMARY KEY) | Поле _id |
| JOIN | Вложение документа или $lookup |
Смена мышления
Главный сдвиг: в SQL вы сначала проектируете схему «вширь» (какие таблицы и связи), а данные потом раскладываете. В MongoDB вы думаете «как эта сущность будет читаться и записываться» и складываете её в документ так, чтобы типичный запрос требовал минимум обращений. Структура следует за запросами, а не наоборот.
Итог
- Документ ≈ строка, коллекция ≈ таблица, база ≈ база. Поле ≈ столбец,
_id≈ первичный ключ. - Снаружи документ — это JSON, внутри MongoDB хранит его как бинарный BSON с расширенным набором типов.
- Коллекции и базы создаются автоматически при первой записи и не навязывают единую схему.