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

💻 Примеры

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

Простые фильтры в Compass

Возраст равен 27

{ age: 27 }

В поле Filter это означает: выбрать документы, где значение поля age равно числу 27.

Страна и возраст одновременно

{ native_country: " Mexico", age: 27 }

Два поля в одном фильтре работают как AND: документ должен подходить и по стране, и по возрасту.

Projection и Sort

Показать только два поля

{ age: 1, native_country: 1 }

Это вводится в Project, а не в Filter. Результат будет содержать age, native_country и поле _id по умолчанию.

Скрыть _id

{ _id: 0, age: 1, native_country: 1 }

_id: 0 явно отключает вывод идентификатора, остальные два поля включены через 1.

Сортировка по возрасту

{ age: 1 }
{ age: -1 }

Первый вариант сортирует по возрастанию, второй — по убыванию.

Условия и списки

Возраст от 18 до 30

{ age: { $gte: 18, $lte: 30 } }

Оба оператора находятся внутри условия по одному полю age: возраст должен быть не меньше 18 и не больше 30.

Образование не равно Bachelors

{ education: { $ne: " Bachelors" } }

$ne отфильтровывает документы, где поле не равно указанному значению.

Рабочие часы входят в список

{ hours_per_week: { $in: [45, 50, 80] } }

Подойдут документы, где hours_per_week равно 45, 50 или 80.

Рабочие часы не входят в список

{ hours_per_week: { $nin: [45, 50, 80] } }

Это обратное условие: исключаются 45, 50 и 80 часов в неделю.

Страна или доход

{
  $or: [
    { income_bracket: { $ne: " <=50K" } },
    { native_country: " United-States" }
  ]
}

$or принимает массив условий. Документ попадёт в результат, если выполнится хотя бы одно из них.

Эквивалент в mongosh

Проверить по документации. Источник показывает ввод документов в полях Compass. В mongosh те же фильтры обычно передаются методу find(); точный синтаксис клиента проверяйте по документации MongoDB.
db.US_Adult_Income.find(
  { age: { $gte: 18, $lte: 30 } },
  { _id: 0, age: 1, native_country: 1 }
).sort({ age: -1 })