Задача 6
db.sales.find({}, { storeLocation: 1, total: 1, saleDate: 1 })
.sort({ total: -1 })
.limit(10)Сортируем по вычисленному полю total из предыдущей части.
Вторая часть практической отработки продолжает задачи после вычисленного total.
Сначала нужно отсортировать sales по новому полю total и найти самые большие заказы.
Самый активный reviewer в Airbnb ищется через $unwind, $group, $sort и $limit.
Топ-5 популярных кухонь строится группировкой restaurants по cuisine.
$lookup объединяет customers и transactions по accounts/account_id.
Geo-запрос по Brighton Beach использует Polygon из neighborhoods и $geoWithin для restaurants.
Домашка 19 анализирует ich.Spotify_Youtube: Danceability, Energy, Duration_ms, Album, Views и Stream.
Топ-3 ошибки: забыть, что accounts — массив, перепутать порядок координат GeoJSON, не исключить compilation в задаче по длительности.
db.sales.find({}, { storeLocation: 1, total: 1, saleDate: 1 })
.sort({ total: -1 })
.limit(10)Сортируем по вычисленному полю total из предыдущей части.
db.listingsAndReviews.aggregate([
{ $unwind: "$reviews" },
{ $group: { _id: "$reviews.reviewer_id", reviewer_name: { $first: "$reviews.reviewer_name" }, total_reviews: { $sum: 1 } } },
{ $sort: { total_reviews: -1 } },
{ $limit: 1 }
])Каждый отзыв становится отдельным входным документом для группировки.
db.restaurants.aggregate([
{ $group: { _id: "$cuisine", count: { $sum: 1 } } },
{ $sort: { count: -1 } },
{ $limit: 5 },
{ $project: { _id: 0, cuisine: "$_id", count: 1 } }
])Топ строится после подсчёта count.
db.customers.aggregate([
{ $match: { name: "Lauren Clark" } },
{ $lookup: { from: "transactions", localField: "accounts", foreignField: "account_id", as: "customer_transactions" } },
{ $project: { _id: 1, username: 1, name: 1, email: 1, transactions: "$customer_transactions" } }
])$lookup добавляет массив customer_transactions.
db.Spotify_Youtube.aggregate([
{ $group: { _id: "$Album", tracks: { $sum: 1 } } },
{ $sort: { tracks: -1 } },
{ $limit: 1 }
])Группировка по Album отвечает на вопрос об одном альбоме с максимальным количеством треков.