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

📖 Теория

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

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

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

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

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

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

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

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

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

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

Разбор темы

Что тренируем

Источник даёт практикум, а не новую лекцию: студент должен самостоятельно собрать данные, проверить фильтры и увидеть, как MongoDB работает с числами, булевыми значениями и отрицательными температурами.

Структура документа

Каждая планета хранится как один документ. Поле orderFromSun удобно для сортировки, hasRings — для булевых фильтров, surfaceTemperatureC — для диапазонов.

{
  name: "Mercury",
  orderFromSun: 1,
  hasRings: false,
  surfaceTemperatureC: 67
}

Почему нужен личный суффикс

В источнике сказано добавить имя для уникальности. В учебной базе несколько студентов могут работать рядом, поэтому planets_anna безопаснее, чем общая planets.

Диапазоны и булевы поля

MongoDB не требует отдельного оператора BETWEEN: диапазон собирается объектом с $gte и $lte. Булево поле фильтруется значениями true/false без кавычек.

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

Дополнение документов

После первичных запросов коллекция расширяется массой планет. Для разных значений по именам удобнее выполнить несколько updateOne или bulkWrite.

db.planets_name.updateOne(
  { name: "Earth" },
  { $set: { mass10e24kg: 5.97, type: "terrestrial" } }
)