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

🐛 Ошибки

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

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

Занятие 54 переводит вводные понятия MongoDB в первые реальные запросы к коллекции ich.US_Adult_Income.

Простой фильтр в Compass записывается как документ: { age: 27 }. Несколько полей в одном фильтре работают как логическое AND.

Вкладка или поле Project управляет тем, какие поля показать: { age: 1, native_country: 1 }.

Поле _id выводится по умолчанию, поэтому его исключают явно: { _id: 0, age: 1, native_country: 1 }.

Sort принимает 1 для возрастания и -1 для убывания, например { age: -1 }.

Для условий используются операторы $lt, $lte, $gt, $gte, $ne, $in, $nin и $or.

Топ-3 ошибки: писать Project в Filter, забывать пробелы в строковых значениях источника, путать $in и $nin.

Типичные ошибки в первых запросах

Писать Project в Filter

Симптом: вместо выбора полей Compass пытается найти документы с полями age и native_country, равными 1.

Исправление: фильтры вводите в Filter, а выбор полей — в Project.

Удалять пробелы в строковых значениях источника

Симптом: { native_country: "Mexico" } ничего не находит, хотя пример с Мехико есть в уроке.

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

Путать 1 в Project и Sort

Симптом: студент думает, что { age: 1 } всегда означает «показать возраст».

Исправление: смысл зависит от поля Compass. В Project это включение поля, в Sort — сортировка по возрастанию.

Забывать исключить _id

Симптом: в результате виден _id, хотя просили только age и native_country.

Исправление: добавьте _id: 0 в Project.

Использовать $in вместо $nin

Симптом: запрос возвращает тех, кто работает 45, 50 или 80 часов, хотя нужно было исключить эти значения.

Исправление: для отрицания списка используйте $nin.

Писать $or как обычное поле

Симптом: структура запроса не читается Compass или не даёт ожидаемый результат.

Исправление: $or должен получать массив документов: { $or: [ { ... }, { ... } ] }.

Смешивать числовые и строковые значения

Симптом: { age: "27" } не совпадает с числовым полем age.

Исправление: числа пишите без кавычек, строки — в кавычках.