← К оглавлению занятия
⚡ Кратко: суть занятия
Практикум 18 закрепляет агрегацию MongoDB на учебных коллекциях Ich.credit_cards, ich.bookings и ich.sample_training.
Для credit_cards нужно считать средние значения по категориям: образование, доход и семейный статус.
Самый частый уровень образования ищется через группировку, подсчёт, сортировку по убыванию и limit.
В bookings требуется найти среднее количество топлива, использованного за поездку.
В sample_training нужно анализировать города: население, штаты, средние значения и ZIP коды штата IL.
Главная конструкция занятия — aggregate() с этапами $group, $sort, $limit, $match и $project.
Топ-3 ошибки: группировать по неверному полю, забыть числовой тип у агрегируемого поля, сортировать до вычисления агрегата.
Рабочие примеры
Средний возраст по образованию
db.credit_cards.aggregate([
{ $group: { _id: "$Education_Level", avgAge: { $avg: "$Customer_Age" } } },
{ $sort: { _id: 1 } }
])
Группировка идёт по категории образования, а $avg считает возраст внутри каждой группы.
Средний кредитный лимит по доходу
db.credit_cards.aggregate([
{ $group: { _id: "$Income_Category", avgCreditLimit: { $avg: "$Credit_Limit" } } },
{ $sort: { avgCreditLimit: -1 } }
])
Сортировка после $group показывает категории дохода с более высоким средним лимитом.
Самый частый уровень образования
db.credit_cards.aggregate([
{ $group: { _id: "$Education_Level", count: { $sum: 1 } } },
{ $sort: { count: -1 } },
{ $limit: 1 }
])
Это частотный анализ: количество документов в каждой категории и верхняя категория.
Топ ZIP кодов штата IL
db.zips.aggregate([
{ $match: { state: "IL" } },
{ $sort: { pop: -1 } },
{ $limit: 10 },
{ $project: { _id: 1, city: 1, state: 1, pop: 1 } }
])
Сначала ограничиваем штат, затем сортируем по населению и показываем только нужные поля.