Справочник по MongoDB · инструменты и источники
Материалы
Инструменты
и материалы
Где смотреть данные, чем проверить запрос без сервера, как разобрать план выполнения и куда идти за ответом, которого нет в этой книге. Каждый инструмент разобран: что он делает, чего не делает и в какой момент работы он нужен.
- Зачем раздел
- Рабочее окружение вокруг базы: просмотр, проверка, разбор, документация
- Что внутри
- Шесть групп инструментов и материалов, у каждого — адрес и назначение
- Цена
- Помечена у каждого: бесплатно, бесплатная версия или платно
- Проверено
- Все адреса открывались на момент выпуска раздела
§0Куда идти с вопросом
Вопросы к базе бывают четырёх видов, и отвечают на них разные источники. Поиск в интернете подходит не для каждого вопроса: статьи устаревают вместе с версиями, а документация обновляется вместе с ними.
explain плюс визуализатор плана. По одному тексту запроса скорость не определить.Пометка вендорский у материала означает, что его выпустила сама компания MongoDB Inc. Такие материалы точны в части команд и версий, но написаны, чтобы показать продукт с удачной стороны: сравнений с другими базами и разбора неудачных внедрений там не будет.
§1Документация
Документация MongoDB разделена на несколько отдельных сайтов, и это сбивает с толку: поиск выдаёт страницу из руководства по Atlas, когда нужна страница про оболочку. Ниже разобрано, за что отвечает каждый раздел.
Описание самой базы: типы BSON, методы коллекции, операторы запроса и обновления, индексы, агрегация, репликация. Первое место, куда стоит смотреть по любому вопросу о поведении сервера.
- Что открыть
- Раздел Query Operators — полный список операторов фильтра с примерами. В нём есть и редкие операторы, которые в статьи не попадают.
- Версия
- В левом верхнем углу переключатель версии сервера. На стенде курса стоит MongoDB 7 — выбирайте её, иначе примеры могут не запуститься.
- Язык
- Английский. Русского перевода официальной документации нет; переводы на сторонних сайтах отстают на несколько версий.
Оболочка mongosh — это программа JavaScript с подключением к серверу, поэтому у неё свои возможности: переменные, циклы, функции, загрузка скриптов файлом, настройка вывода. В основное руководство это не входит.
- Что открыть
- Раздел Reference — список команд оболочки, и Write Scripts — как оформить набор команд файлом и запустить его разом.
Набор отдельных программ: mongoimport и mongoexport для JSON и CSV, mongodump и mongorestore для двоичных копий базы. Они не входят в поставку сервера и ставятся отдельно.
- Где встречается
- Скрипт
stend/load.shв репозитории практик заливает базы курса именно черезmongoimport— глава 1.0. - Разница
mongoexportотдаёт JSON, читаемый человеком, но теряет часть типов BSON.mongodumpсохраняет типы точно, но его файл открыть текстовым редактором нельзя. Для резервной копии берут второе, для обмена данными — первое.
§2Посмотреть данные глазами
Графический клиент показывает документы таблицей или деревом, строит фильтры без синтаксиса и выводит статистику коллекции. На задачах курса он экономит время: структуру незнакомой коллекции быстрее увидеть, чем вычитать из кода.
Официальный клиент, на нём сняты все кадры в этой книге. Кроме просмотра документов умеет три вещи, которых нет у большинства остальных: анализ схемы, сборку конвейера агрегации по стадиям и разбор плана выполнения запроса схемой.
- Анализ схемы
- Вкладка Schema берёт выборку документов и показывает, какие поля вообще встречаются в коллекции, какого они типа и в какой доле документов есть. На чужой базе это первое, что стоит открыть.
- План выполнения
- Вкладка Explain Plan рисует те же шаги, что разбираются в практикуме, прямо в окне клиента — без выгрузки JSON на сторонний сайт.
- Ограничение
- Анализ схемы идёт по выборке, а не по всей коллекции. Редкое поле, которое есть у одного документа из десяти тысяч, в отчёт может не попасть.
Подключение к серверу прямо из редактора: коллекции видны в боковой панели, а запросы пишутся в файле .mongodb.js и запускаются по кнопке. Результат открывается соседней вкладкой.
- Чем удобно
- Запросы остаются файлом в репозитории: их видно в истории изменений, можно показать преподавателю и запустить повторно. В оболочке набранная команда теряется вместе с окном терминала.
- Установка
- Поиск «MongoDB for VS Code» в разделе расширений редактора.
Два клиента с автодополнением команд и переводом запросов из SQL в язык MongoDB — это помогает тем, кто пришёл из реляционных баз. У обоих есть бесплатная редакция с ограничениями и платная полная.
- Когда нужны
- Когда работа идёт с большой незнакомой базой каждый день. Для задач курса возможностей Compass хватает целиком.
- Осторожно
- Перевод SQL в запрос MongoDB работает на простых случаях и создаёт ложное ощущение, что базы устроены одинаково. Соединения и вложенные документы он передаёт плохо.
На стенде курса есть третий вариант, который ставить не нужно: mongo-express по адресу localhost:8081, логин и пароль student. Он запускается вместе с сервером командой docker compose up -d и показывает базы и документы в браузере. Возможностей у него меньше, чем у Compass, но он работает там, где ничего нельзя установить.
§3Проверить запрос без сервера
Бывает нужно проверить один запрос, когда стенд не под рукой: на чужом компьютере, на паре, в переписке с коллегой. Для этого есть песочницы — сайты, где документы и запрос набираются прямо в браузере.
Три поля на одной странице: документы коллекции, запрос или конвейер агрегации, результат. Регистрации нет, сохранённая ссылка живёт постоянно. Проект открытый, исходники — на github.com/feliixx/mongoplayground.
- Для чего
- Разобрать оператор на трёх документах вместо полутора тысяч. Показать коллеге воспроизводимый пример ссылкой, а не скриншотом.
- Чего не делает
- Плана выполнения не показывает: данных мало, замерять там нечего. Скорость запроса на песочнице ни о чём не говорит.
- Данные
- Сохранённая песочница открыта любому по ссылке. Рабочие данные туда не вставляют.
Официальная песочница для полнотекстового поиска: там настраивается индекс поиска и проверяется стадия $search. Обычные запросы find она не выполняет.
- Когда пригодится
- В модуле 3, на теме текстового поиска. Настройка поискового индекса сложнее обычного, и подбирать её на живой базе долго.
§4Разобрать план выполнения
Документ explain — вложенные объекты на несколько экранов, и читать его в терминале тяжело. Визуализатор превращает его в схему шагов и подписывает, сколько документов прочитано на каждом. Как это делается по шагам, разобрано в практикуме после модуля 1.
Принимает JSON плана и строит дерево выполнения с раскраской шагов по стоимости. Разбирает запрос по правилу ESR и называет порядок полей для индекса. Кнопка обмена сворачивает план в ссылку — по ней разбор открывает любой, файл пересылать не нужно.
- Основной инструмент
- В практикуме работа идёт на нём: из трёх визуализаторов только он объясняет, почему порядок полей в индексе именно такой.
- Исходники
- github.com/dfrancour/mongodb-paste-the-plan, лицензия MIT. Инструмент можно поднять у себя, если наружу отдавать планы нельзя.
Тот же разбор плана, но с общей оценкой запроса в баллах. Оценка удобна как ориентир в задании: «доведите запрос до такого-то значения». Второй инструмент нужен ещё и для сверки — два разных разбора одного плана должны указать на одно узкое место.
Первоисточник правила Equality — Sort — Range: как расставить поля в составном индексе и почему именно так. Рядом лежит страница Interpret Explain Plan Results с расшифровкой всех шагов плана, включая редкие.
- Зачем читать
- Визуализатор выдаёт готовый ответ, но не объясняет его. Объяснение, которое спрашивают на приёмке и на собеседовании, — здесь.
§5Спроектировать схему
В MongoDB схема не задаётся заранее: сервер примет любой документ. Решение о том, какие поля завести и что во что вложить, принимает разработчик. Последствия неудачного решения проявляются позже: на выросшем объёме данных и на запросах, которых в начале работы не было.
Двенадцать типовых решений с разбором: когда данные вкладывают в документ, а когда разносят по коллекциям; как хранить историю версий; что делать с документом, который растёт без предела. У каждого шаблона указано, какую задачу он решает и какие ограничения вводит.
- С чего начать
- С шаблонов Extended Reference и Subset: они отвечают на вопрос, с которого начинается проектирование: вкладывать связанные данные в документ или ссылаться на них.
Правило $jsonSchema заставляет сервер отвергать документы, в которых нет обязательного поля или тип не тот. Свобода формы при этом сохраняется: проверяется только то, что вы перечислили.
- Где в книге
- Глава 3.1 модуля 3. Раздел документации пригодится раньше, если в своём проекте данные уже расползаются.
Рисование схемы коллекций мышью с выгрузкой готового скрипта: правила проверки и индексы генерируются из нарисованной модели. Mongo Modeler делает то же самое проще и бесплатно, с открытым исходным кодом.
- Для чего
- Показать структуру базы на защите курсовой или дипломной: схема из такого редактора читается без пояснений.
- Не заменяет
- Решение о структуре. Редактор нарисует и неудачную модель.
Служба облака Atlas сама смотрит на медленные запросы работающего кластера и предлагает индексы и правки схемы — то, что в практикуме делается руками. На бесплатном уровне M0 недоступна, нужен платный кластер, поэтому в курсе она разбирается по документации.
- Зачем знать
- На рабочем проекте с этой вкладки начинают разбор жалоб на скорость. Смысл её выводов будет понятен, если вы прошли практикум: там те же числа плана.
§6Учиться дальше
Курсы самой компании с видео, заданиями в браузере и экзаменами на сертификат. Программы обучения собраны по ролям: разработчик, администратор, специалист по данным. Курсы бесплатные; платный только экзамен.
- Язык
- Английский, с субтитрами. Терминология совпадает с документацией, так что после этой книги материал читается.
- Сертификат
- Прохождение программы обучения даёт скидку 50% на экзамен. Студентам и преподавателям по программе MongoDB Students экзамен дают бесплатно, вместе с кредитами на облако Atlas. Заявка подаётся через GitHub Student Developer Pack.
- Значки навыков
- Skill Badges — короткие курсы на одну тему с отдельным подтверждением. Занимают несколько часов, в отличие от полной программы обучения.
Книга Пола Дона о конвейере агрегации, выложенная целиком и бесплатно. Разбирает то, чего нет в документации: как строить конвейер по шагам, какие приёмы ускоряют его и какие типовые задачи какими стадиями решаются.
- Когда читать
- После модуля 4. До него пользы будет мало: примеры опираются на стадии, которые там разбираются.
Официальный форум, где отвечают инженеры компании. Читать его стоит ради чужих вопросов: в разделе о производительности разобраны десятки реальных планов выполнения с объяснением, что в них не так.
- Как спрашивать
- К вопросу о скорости прикладывают вывод
explain("executionStats"), версию сервера и список индексов коллекции. Без этих трёх вещей ответить нельзя, и первым же сообщением их попросят.
§7Что проверять в чужом материале
Статьи о MongoDB устаревают быстрее, чем статьи о языках программирования: поведение сервера меняется от версии к версии, и совет 2015 года может быть прямо вредным сегодня. Три проверки перед тем, как применять прочитанное.
Языковые модели уверенно выдают операторы MongoDB, которых не существует, и путают синтаксис агрегации с синтаксисом find. Полученный от модели запрос проверяют двумя способами: ищут каждый оператор в справочнике операторов и выполняют запрос на данных курса. Без этой проверки неверный updateMany попадает в базу.
§8Сводка
| Задача | Инструмент | Адрес |
|---|---|---|
| Найти оператор | MongoDB Manual | mongodb.com/docs/manual/ |
| Посмотреть данные | Compass | mongodb.com/products/tools/compass |
| Посмотреть данные без установки | mongo-express на стенде | localhost:8081, student / student |
| Проверить запрос без сервера | Mongo Playground | mongoplayground.net |
| Разобрать план выполнения | Paste the Plan | dfrancour.dev/tools/mongodb-paste-the-plan |
| Подобрать порядок полей в индексе | Правило ESR | mongodb.com/docs/manual/tutorial/equality-sort-range-guideline/ |
| Спроектировать схему | Schema Design Patterns | mongodb.com/docs/manual/data-modeling/design-patterns/ |
| Разобраться в агрегации | Practical MongoDB Aggregations | practical-mongodb-aggregations.com |
| Пройти курс и сдать экзамен | MongoDB University | learn.mongodb.com |
| Задать вопрос | Community Forums | mongodb.com/community/forums/ |