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

✅ Решения

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

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

Вторая часть Atlas переносит акцент с индексов на наполнение коллекций и запись результата aggregation.

Коллекция students создаётся через insertMany из CSV-подобной таблицы.

Выпускников можно выбрать через $match по году обучения и записать в новую коллекцию через $out.

$out записывает результат pipeline в коллекцию, поэтому перед запуском нужно понимать, куда попадут данные.

Задание с airbnb_Istanbul и airbnb_manhattan100 тренирует геофильтр, сортировку и экспорт результата.

Для Manhattan используется Polygon в address.location и сортировка price: -1.

Для топ-100 нужна стадия $limit: 100 перед $out.

Топ-3 ошибки: забыть создать/проверить коллекцию назначения, поставить $out не последней стадией, скопировать типографские кавычки вместо обычных.

Решения с пояснениями

students

db.students.insertMany([
  { sID: 22001, name: "Alex", year: 1, score: 4.0 },
  { sID: 21001, name: "bernie", year: 2, score: 3.7 },
  { sID: 20010, name: "Chris", year: 3, score: 2.5 },
  { sID: 22021, name: "Drew", year: 1, score: 3.2 },
  { sID: 17301, name: "harley", year: 6, score: 3.1 },
  { sID: 21022, name: "Farmer", year: 1, score: 2.2 },
  { sID: 20020, name: "george", year: 3, score: 2.8 },
  { sID: 18020, name: "Harley", year: 5, score: 2.8 }
])

Вставляем данные источника без изменения значений.

Выпускники

db.students.aggregate([
  { $match: { year: { $gte: 5 } } },
  { $out: "graduated_students" }
])

Если преподаватель задаёт другой критерий выпускника, замените условие $match.

Istanbul

db.listingsAndReviews.aggregate([
  { $match: { "address.market": "Istanbul" } },
  { $out: "airbnb_Istanbul" }
])

Проверьте имя коллекции и поле города в sample_airbnb.

Manhattan 100

[
  { $match: { "address.location": { $geoWithin: { $geometry: { type: "Polygon", coordinates: [[/* координаты из источника */]] } } } } },
  { $sort: { price: -1 } },
  { $limit: 100 },
  { $out: "airbnb_manhattan100" }
]

$out последним записывает уже отфильтрованный и ограниченный результат.