ЛЕКЦІЯ 12

Вступ до NoSQL: MongoDB CRUD

Основи баз даних

VTFK • 2025

Що вже вивчили

Лекція 11: Пріоритет операторів

  • SQL запити та фільтрація
  • AND/OR/NOT логіка
  • Комментарии та документація

План лекції

  • Що таке NoSQL та MongoDB
  • Документи vs таблиці
  • Операції CRUD
  • Індекси та запити

Фокус: гнучка схема, JSON-подібні дані

Навіщо NoSQL

MongoDB

Document Database

СУБД, яка зберігає дані як JSON документи в колекціях, без фіксованої схеми.

Аналогія: Як папка файлів, де кожен файл = JSON, а не рядки таблиці

SQL vs MongoDB

Структура данных

%%{init: {"theme": "neutral", "mermaid": {"version": "11.12.2"}}}%% flowchart LR SQL[(SQL Database
Таблиці
Рядки & Колонки
Схема обов'язкова)] NoSQL[(MongoDB
Колекції
Документи JSON
Гнучка схема)] SQL -->|SELECT FROM| Rows[Рядки] NoSQL -->|find()| Docs[Документи]

Термінологія

SQL MongoDB Опис
Database Database Контейнер
Table Collection Набір даних
Row Document Запис
Column Field Атрибут
Index Index Прискорення пошуку
Primary Key _id Унікальний ідентифікатор

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

Документ MongoDB

Типовий структура

{
  _id: ObjectId("507f1f77bcf86cd799439011"),
  name: "Alice",
  email: "alice@example.com",
  age: 28,
  active: true,
  address: {
    city: "Kyiv",
    zipcode: "01001"
  },
  hobbies: ["reading", "coding", "travel"]
}

CRUD операції

CREATE: Додаємо документ

insertOne та insertMany

// Додаємо одного користувача
db.users.insertOne({
  name: "Bob",
  email: "bob@example.com",
  age: 25
});

// Додаємо кількох за раз
db.users.insertMany([
  { name: "Carol", age: 30 },
  { name: "David", age: 35 }
]);

READ: Отримуємо документи

find та findOne

// Отримуємо всіх користувачів
db.users.find();

// Отримуємо першого відповідного
db.users.findOne({ name: "Bob" });

// З фільтром
db.users.find({ age: { $gt: 25 } });  // вік > 25

// З проекцією (вибір колонок)
db.users.find({}, { name: 1, email: 1 });

Оператори запиту

Оператор Значення Приклад
$gt більше { age: { $gt: 25 } }
$lt менше { age: { $lt: 65 } }
$gte { age: { $gte: 18 } }
$lte { age: { $lte: 100 } }
$eq дорівнює { status: { $eq: 'active' } }
$ne не дорівнює { role: { $ne: 'admin' } }
$in у списку { status: { $in: ['active','pending'] } }

UPDATE: Оновлюємо дані

updateOne та updateMany

// Оновляємо одного користувача
db.users.updateOne(
  { name: "Bob" },
  { $set: { age: 26, updated_at: new Date() } }
);

// Оновляємо кількох
db.users.updateMany(
  { age: { $lt: 18 } },
  { $set: { status: "minor" } }
);

// Інкремент
db.users.updateOne(
  { _id: 123 },
  { $inc: { login_count: 1 } }
);

DELETE: Видаляємо документи

deleteOne та deleteMany

// Видаляємо одного
db.users.deleteOne({ _id: ObjectId("...") });

// Видаляємо кількох
db.users.deleteMany({ age: { $lt: 18 } });

// Видаляємо всіх (ОБЕРЕЖНО!)
db.users.deleteMany({});

Міні-вікторина

Як отримати користувачів віком > 25?

  • db.users.find(age > 25)
  • db.users.find({ age: { $gt: 25 } })
  • db.users.select(age) WHERE age > 25
✅ Правильна відповідь: db.users.find({ age: { $gt: 25 } })
💡 Пояснення:

MongoDB використовує оператори $gt, $lt итак далі

Помилка: забути $set

⚠️ ЗАСТЕРЕЖЕННЯ

Без $set весь документ заміниться

❌ Неправильно

db.users.updateOne(
  { _id: 123 },
  { age: 26 }  // НЕПРАВИЛЬНО! замінить весь документ
);

Документ буде мати тільки поле age

✓ Правильно

db.users.updateOne(
  { _id: 123 },
  { $set: { age: 26 } }  // оновити тільки age
);

$set оновлює конкретні поля

Еволюція NoSQL

Від документів до AI

2009

MongoDB

Перша версія

2012

Atlas

Cloud MongoDB

2020

Aggregation

Pipeline для аналізу

2025

AI Search

Векторний пошук

Best practices MongoDB

Міні ТЗ: MongoDB блог

Комплексний приклад

Схема блога

// Додаємо пост
db.posts.insertOne({
  title: "MongoDB вступ",
  content: "Документоорієнтована база",
  author: "alice@example.com",
  likes: 5,
  created_at: new Date(),
  tags: ["database", "nosql"]
});

// Шукаємо посты автора
db.posts.find({ author: "alice@example.com" });

// Додаємо лайк
db.posts.updateOne(
  { _id: ObjectId("...") },
  { $inc: { likes: 1 } }
);

Підсумки

  • MongoDB = документна БД без фіксованої схеми
  • CRUD операції: insert, find, update, delete
  • $gt, $lt, $in для складних запитів

Далі — роботав з датами та часом

Домашнє завдання

Наступна лекція:

Лекція 13: Дати та час у SQL

📚 Корисні ресурси:

📚 Корисні ресурси:

Дякую за увагу! 💾

← Повернутися до списку лекцій