Базы данных

Учебник MongoDB для начинающих

40 уроков · 10 разделов · бесплатно, без регистрации

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

Курс «MongoDB» состоит из 10 разделов и 40 уроков: Введение в MongoDB, CRUD: создание и чтение, CRUD: обновление и удаление, Моделирование данных, Агрегация и индексы, Практика и экосистема, Конвейер агрегации вглубь, Индексы и производительность, Транзакции и согласованность и Репликация, шардирование и эксплуатация. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Введение в MongoDB

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

      MongoDB и документоориентированная модель: чем NoSQL-документная БД отличается от реляционной и где она уместна.

    2. Документы, коллекции и базы

      Документ, коллекция и база в MongoDB: BSON против JSON и таблица соответствия реляционным понятиям.

    3. Установка: Atlas, Docker и mongosh

      Как поднять MongoDB: облако Atlas, локальный Docker-контейнер и подключение через mongosh.

    4. Первые команды в mongosh

      Первые шаги в mongosh: вставка документа, чтение через find и удаление — базовый цикл работы с коллекцией.

  2. 2 CRUD: создание и чтение

    1. Вставка: insertOne и insertMany

      Как добавлять документы в MongoDB: insertOne и insertMany, упорядоченная и неупорядоченная вставка.

    2. Поле _id и тип ObjectId

      Зачем нужно поле _id, как устроен ObjectId и можно ли задавать собственный идентификатор документа.

    3. Чтение и операторы запроса

      Чтение документов в MongoDB: фильтры в find и операторы запроса $gt, $lt, $in, $exists, $and, $or.

    4. Проекции, сортировка и пагинация

      Управление выдачей в MongoDB: проекция полей, sort для сортировки и limit/skip для постраничной выборки.

  3. 3 CRUD: обновление и удаление

    1. Обновление: updateOne и updateMany

      Обновление документов в MongoDB: updateOne и updateMany и оператор $set для изменения полей.

    2. Операторы обновления полей

      Операторы обновления MongoDB: $set, $unset, $inc, $mul, $rename и $min/$max для изменения полей.

    3. Работа с массивами в документах

      Изменение массивов в MongoDB: $push, $pull, $addToSet, $each и оператор позиции для элементов массива.

    4. upsert, replaceOne и удаление

      upsert «обнови или вставь», полная замена replaceOne и удаление документов через deleteOne и deleteMany.

  4. 4 Моделирование данных

    1. Встраивание против ссылок

      Embedding и referencing в MongoDB: когда вкладывать связанные данные в документ, а когда хранить ссылки.

    2. Связи: один-ко-многим и многие-ко-многим

      Моделирование связей в MongoDB: один-ко-многим через встраивание или массив ссылок и многие-ко-многим.

    3. Денормализация и дублирование

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

    4. Схема, валидация и антипаттерны

      Схема в «бессхемной» MongoDB: соглашения о структуре, JSON Schema-валидация и типичные антипаттерны.

  5. 5 Агрегация и индексы

    1. Конвейер агрегации: $match, $group, $sort

      Конвейер агрегации MongoDB: этапы $match, $group и $sort для фильтрации, группировки и сортировки данных.

    2. Аккумуляторы, $project и $lookup

      Аккумуляторы $sum/$avg/$min/$max, преобразование полей через $project и объединение коллекций через $lookup.

    3. Индексы: зачем и какие бывают

      Индексы в MongoDB: createIndex, составные и уникальные индексы и почему без них запросы тормозят.

    4. explain: как понять, что делает запрос

      Анализ запросов в MongoDB через explain: как увидеть, использует ли запрос индекс или сканирует коллекцию.

  6. 6 Практика и экосистема

    1. MongoDB из приложения: драйвер Node.js

      Работа с MongoDB из приложения на Node.js: подключение драйвером, базовые операции и async/await.

    2. Транзакции, репликация и шардирование

      Транзакции для многодокументных операций, репликация для надёжности и шардирование для масштабирования в MongoDB.

    3. Проектируем схему: блог и магазин

      Практика проектирования схемы MongoDB: модель данных для блога и интернет-магазина с встраиванием и ссылками.

    4. Итоги и что дальше

      Краткое повторение ключевых идей MongoDB и ориентиры для дальнейшего изучения: Atlas, агрегации, производительность.

  7. 7 Конвейер агрегации вглубь

    1. Этапы конвейера: $match, $group, $project, $sort

      Этапы aggregation pipeline в MongoDB: $match, $group с аккумуляторами $sum/$avg/$push, $project и $addFields, $sort и зачем ранний $match.

    2. Соединения: $lookup и $unwind

      Соединения в MongoDB: $lookup как левый JOIN по localField/foreignField, $unwind для массивов, pipeline-форма $lookup и когда денормализация выгоднее.

    3. $facet, $bucket, $graphLookup

      Продвинутые этапы агрегации MongoDB: подитоги одним проходом через $facet, гистограммы $bucket/$bucketAuto, иерархии $graphLookup и материализация $merge/$out.

    4. Производительность агрегаций

      Как ускорить агрегации MongoDB: ранний $match и $sort до $group, использование индексов на первых этапах, чтение плана через explain, лимит памяти 100 МБ и allowDiskUse, ранний $project.

  8. 8 Индексы и производительность

    1. Типы индексов: составные, multikey, текстовые, геопространственные

      Все типы индексов MongoDB: одиночные и составные, multikey по массивам, текстовый поиск, 2dsphere для гео, а также уникальные и частичные индексы.

    2. Правило ESR и порядок полей в составном индексе

      Правило ESR (Equality, Sort, Range) для порядка полей в составном индексе MongoDB. Почему порядок важен, что такое префикс и как заменить много индексов одним.

    3. explain() и покрывающие запросы

      Как читать explain() executionStats в MongoDB: IXSCAN против COLLSCAN, метрики totalKeysExamined и totalDocsExamined, покрывающие запросы из индекса.

    4. Грабли производительности

      Антипаттерны производительности MongoDB: лимит документа 16 МБ, неограниченный рост массивов, сортировка без индекса, regex без префикса, $where и плохая схема.

  9. 9 Транзакции и согласованность

    1. Атомарность на уровне документа

      Почему любая операция над одним документом в MongoDB атомарна, как встраивание убирает нужду в транзакциях и почему $inc и $push безопасны при конкуренции.

    2. Многодокументные транзакции

      Многодокументные транзакции в MongoDB: session.startTransaction/commit/abort, когда они реально нужны, чего стоят и почему обязательны ретраи при TransientTransactionError.

    3. Read concern и Write concern

      Read concern и write concern в MongoDB: w:1 против majority, journal, уровни local/majority/linearizable и компромисс между скоростью записи и надёжностью данных.

    4. Модели согласованности и retryable writes

      Причинная согласованность, read-your-writes, retryable writes и reads в MongoDB, чтение со вторичных узлов и риск устаревания данных при масштабировании чтения.

  10. 10 Репликация, шардирование и эксплуатация

    1. Replica Set: отказоустойчивость

      Replica set в MongoDB: роли primary, secondary и arbiter, выборы primary и автоматический failover, oplog, write concern и чтение со вторичных узлов.

    2. Шардирование: горизонтальное масштабирование

      Шардирование MongoDB: зачем оно нужно, выбор shard key как важнейшее решение, chunks и balancer, hashed против ranged, частые ошибки выбора ключа.

    3. Change Streams и реактивность

      Change Streams в MongoDB: отслеживание изменений в реальном времени через watch(), уведомления и синхронизация, resume token и устойчивость к разрывам.

    4. Эксплуатация: бэкапы, валидация схемы, Atlas

      Эксплуатация MongoDB: mongodump и mongorestore, валидация коллекции через $jsonSchema, мониторинг, облако MongoDB Atlas и базовая безопасность с RBAC.