← К оглавлению занятия

📖 Теория

📁 Блок: MongoDB / Практикум / Запросы ⏱️ Время изучения: ~90 мин 🎯 Сложность: Практикум

⚡ Кратко: суть занятия

Практикум 15 закрепляет фильтры MongoDB на коллекции ich.imdb.

Основные инструменты: find(), countDocuments(), sort(), limit() и проекция полей.

Отсутствие режиссёра проверяется через $exists: false или через аккуратную проверку пустого массива, если поле есть.

Фильмы США и Франции ищутся по массиву countries через $all.

Китайский или французский язык удобно искать через $in в поле languages.

Жанры Mystery и Sci-Fi вместе требуют $all, а вариант ИЛИ — $in.

Для максимального рейтинга нужно исключить документы без imdb.rating и отсортировать по убыванию.

Топ-3 ошибки: путать $all и $in, сортировать строковые годы как числа без проверки типа, считать документы через find().length вместо countDocuments().

Ключевые идеи

Практикум как проверка предыдущих уроков

Источник даёт 12 задач на MongoDB-запросы. Все они продолжают темы Compass и mongosh: фильтр, массивы, отсутствие поля, сортировка, ограничение результата и подсчёт.

Главный навык занятия — переводить человеческую формулировку в точный фильтр. Если в условии сказано «и», чаще всего нужен $all для массива или несколько условий в одном фильтре. Если сказано «или», обычно нужен $in или $or.

Массивы: все элементы или любой элемент

Поле countries, languages, genres, cast или directors в imdb обычно содержит массив. Поэтому важно решить, нужно ли наличие всех значений или хотя бы одного.

$all выбирает документы, где массив содержит все перечисленные значения. $in выбирает документы, где значение поля совпадает хотя бы с одним элементом списка; для массива это означает наличие хотя бы одного из указанных элементов.

Поля, которых нет

Задача «не указан режиссёр» неоднозначна: в данных поле directors может отсутствовать, быть пустым массивом или содержать null. В практикуме стоит проверить структуру документов и выбрать фильтр под реальный вид данных.