← К оглавлению занятия
⚡ Кратко: суть занятия
Практикум 14 закрепляет первые запросы MongoDB на учебных коллекциях sample_training и sample_restaurants.
Главная идея: сначала сузить выборку через Filter, затем отдельно решить, нужны ли Project, Sort, Limit или подсчёт.
В companies нужно найти компании, основанные с 2005 года, и разнести их по размеру штата.
Компании с number_of_employees: 0 источник рекомендует не учитывать.
Для acquisition нужно сортировать сделки по цене и выписать участников и source_url.
В trips нужно найти самую долгую аренду велосипеда и самый часто встречающийся bikeid.
В restaurants нужно посчитать рестораны по районам.
Топ-3 ошибки: считать нулевой штат как стартап, сортировать строковые деньги как числа, забывать limit(5) для топа поглощений.
Выполнимые примеры
Компании с 2005 года без нулевого штата
db.companies.find(
{ founded_year: { $gte: 2005 }, number_of_employees: { $gt: 0 } },
{ name: 1, founded_year: 1, number_of_employees: 1, _id: 0 }
)
Фильтр одновременно проверяет год основания и исключает компании с неизвестным или нулевым количеством сотрудников.
Пять самых дорогих поглощений
db.companies.find(
{ "acquisition.price_amount": { $gt: 0 } },
{ name: 1, "acquisition.acquired_company.name": 1, "acquisition.price_amount": 1, "acquisition.price_currency_code": 1, "acquisition.source_url": 1, _id: 0 }
).sort({ "acquisition.price_amount": -1 }).limit(5)
Сортировка идёт по вложенному числовому полю цены, затем limit оставляет топ-5.
Самая долгая аренда велосипеда
db.trips.find(
{},
{ tripduration: 1, bikeid: 1, start_station_name: 1, end_station_name: 1, _id: 0 }
).sort({ tripduration: -1 }).limit(1)
Пустой фильтр берёт все поездки, sort ставит максимальную длительность первой.
Количество ресторанов по районам
db.restaurants.aggregate([
{ $group: { _id: "$borough", total: { $sum: 1 } } },
{ $sort: { total: -1 } }
])
Группировка собирает документы по borough и считает количество в каждой группе.
Проверить по документации. Примеры с aggregate(), $jsonSchema и точными полями sample data сверяйте с текущей структурой коллекции в Compass.