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

💻 Примеры

📁 Блок: 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().

Разбор рабочих запросов

Фильмы США и Франции

db.imdb.find({ countries: { $all: ["USA", "France"] } })

Результат содержит документы, где массив countries включает обе страны. Если заменить $all на $in, попадут фильмы только США или только Франции.

Китайский или французский язык

db.imdb.find({ languages: { $in: ["Chinese", "French"] } })

Оператор $in соответствует формулировке «или»: достаточно одного языка из списка.

Mystery и Sci-Fi одновременно

db.imdb.find({ genres: { $all: ["Mystery", "Sci-Fi"] } })

$all нужен, потому что фильм должен иметь оба жанра.

Топ-10 фильмов 1989 года по рейтингу

db.imdb.find({ year: "1989", "imdb.rating": { $exists: true, $ne: "" } }).sort({ "imdb.rating": -1 }).limit(10)

Фильтр убирает документы без рейтинга, сортировка ставит лучший рейтинг первым, limit оставляет десять строк.