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

💻 Примеры

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

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

Summary session 17 повторяет Atlas, индексы, наполнение коллекций и Aggregation Pipeline.

Atlas — облачный сервис MongoDB для размещения, управления и масштабирования баз данных.

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

COLLSCAN означает просмотр коллекции без индекса, IXSCAN — использование индекса.

FETCH читает документы из коллекции, SORT показывает сортировку в памяти.

Geo-запросы требуют подходящего 2dsphere индекса, например по coordinates.

Практический блок создаёт students, выбирает выпускников и заполняет другую коллекцию.

Домашка разбирает theaters в Калифорнии, максимальные bedrooms и лучший рейтинг при минимум 50 отзывах.

Рабочие примеры

Geo-запрос без/с индексом

db.shipwrecks.createIndex({ coordinates: '2dsphere' })

db.shipwrecks.explain().find({
  coordinates: {
    $geoWithin: {
      $centerSphere: [[-96.48616143525156, 30.714748058919618], 0.07401030386454095]
    }
  }
})

После создания 2dsphere индекса explain должен показывать использование индекса для геофильтра.

Создание students

db.students.insertMany([
  { sID: 22001, name: "Alex", year: 1, score: 4.0 },
  { sID: 17301, name: "harley", year: 6, score: 3.1 },
  { sID: 18020, name: "Harley", year: 5, score: 2.8 }
])

Источник показывает полную таблицу из 8 студентов; пример оставляет несколько строк для краткости.

Выбор выпускников

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

Критерий выпускника в конспекте не раскрыт явно; year >= 5 — практичная интерпретация для этого набора.

Домашка: theaters в Калифорнии

db.theaters.countDocuments({
  "location.address.state": "CA"
})

Задача просит найти кинотеатры в Калифорнии и посчитать их количество.

Домашка: самый высокий рейтинг при 50 отзывах

db.listingsAndReviews.find(
  { number_of_reviews: { $gte: 50 } },
  { name: 1, "review_scores.review_scores_rating": 1, number_of_reviews: 1 }
).sort({ "review_scores.review_scores_rating": -1 }).limit(1)

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