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

💻 Примеры

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

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

Практикум 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.