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

✅ Решения

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

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

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

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

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

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

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

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

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

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

Решения с пояснениями

Mercury

db.planets_name.find({ name: "Mercury" })

Точное совпадение по строковому полю name.

Порядок 1-3

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

Обе границы включены.

Есть кольца

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

Кольца есть у Jupiter, Saturn, Uranus и Neptune.

Выше 50°C

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

Строго больше 50.

От 50°C до 100°C

db.planets_name.find({ surfaceTemperatureC: { $gte: 50, $lte: 100 } })

В исходных данных подходит Mercury.

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

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

Марс не имеет колец и имеет отрицательную температуру.

Самая высокая температура

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

Venus имеет максимальную температуру.

Масса и тип

db.planets_name.bulkWrite([
  { updateOne: { filter: { name: "Mercury" }, update: { $set: { mass10e24kg: 0.33, type: "terrestrial" } } } },
  { updateOne: { filter: { name: "Venus" }, update: { $set: { mass10e24kg: 4.87, type: "terrestrial" } } } },
  { updateOne: { filter: { name: "Earth" }, update: { $set: { mass10e24kg: 5.97, type: "terrestrial" } } } },
  { updateOne: { filter: { name: "Mars" }, update: { $set: { mass10e24kg: 0.642, type: "terrestrial" } } } },
  { updateOne: { filter: { name: "Jupiter" }, update: { $set: { mass10e24kg: 1898, type: "gas giant" } } } },
  { updateOne: { filter: { name: "Saturn" }, update: { $set: { mass10e24kg: 568, type: "gas giant" } } } },
  { updateOne: { filter: { name: "Uranus" }, update: { $set: { mass10e24kg: 86.8, type: "ice giant" } } } },
  { updateOne: { filter: { name: "Neptune" }, update: { $set: { mass10e24kg: 102, type: "ice giant" } } } }
])

bulkWrite удобен, когда каждому документу нужно своё значение.