← К оглавлению занятия
⚡ Кратко: суть занятия
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 отзывами, сортировка поднимает лучший рейтинг наверх.