Практикум 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. В практикуме стоит проверить структуру документов и выбрать фильтр под реальный вид данных.