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

💻 Примеры

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

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

Практикум 16 закрепляет создание коллекции и запросы MongoDB на небольшом наборе planets.

Коллекцию лучше назвать с личным суффиксом, чтобы не конфликтовать с работой других студентов.

Основные поля: name, orderFromSun, hasRings, surfaceTemperatureC.

Фильтры тренируют равенство, диапазоны $gte/$lte, булевы поля и комбинирование условий.

Сортировка по orderFromSun помогает быстро проверить порядок планет.

countDocuments() подходит для подсчёта документов по условию.

После базовых запросов документы дополняются mass10e24kg, а затем используются в сортировках и группировках.

Топ-3 ошибки: записать отрицательные температуры с посторонним символом, перепутать true/false со строками, забыть обновить все планеты перед агрегацией.

Рабочие примеры

Создание коллекции planets

db.planets_name.insertMany([
  { name: "Mercury", orderFromSun: 1, hasRings: false, surfaceTemperatureC: 67 },
  { name: "Earth", orderFromSun: 3, hasRings: false, surfaceTemperatureC: 14 },
  { name: "Uranus", orderFromSun: 7, hasRings: true, surfaceTemperatureC: -197.2 },
  { name: "Jupiter", orderFromSun: 5, hasRings: true, surfaceTemperatureC: -145.15 },
  { name: "Mars", orderFromSun: 4, hasRings: false, surfaceTemperatureC: -63 },
  { name: "Neptune", orderFromSun: 8, hasRings: true, surfaceTemperatureC: -201 },
  { name: "Venus", orderFromSun: 2, hasRings: false, surfaceTemperatureC: 464 },
  { name: "Saturn", orderFromSun: 6, hasRings: true, surfaceTemperatureC: -139.15 }
])

Вставляем все планеты одним действием, чтобы дальше запросы работали на одинаковом наборе данных.

Планеты с порядковым номером 1-3

db.planets_name.find({
  orderFromSun: { $gte: 1, $lte: 3 }
})

Вернутся Mercury, Venus и Earth.

Планеты с кольцами

db.planets_name.find({ hasRings: true })

Важно использовать true как булево значение, а не строку "true".

Температура выше 50°C

db.planets_name.find({
  surfaceTemperatureC: { $gt: 50 }
})

По исходным данным это Mercury и Venus.

Без колец и ниже 0°C

db.planets_name.find({
  hasRings: false,
  surfaceTemperatureC: { $lt: 0 }
})

MongoDB применяет оба условия как логическое И.

Самая горячая планета

db.planets_name.find()
  .sort({ surfaceTemperatureC: -1 })
  .limit(1)

Сортируем по температуре по убыванию и оставляем один документ.