Что такое MongoDB?

MongoDB — это документо-ориентированная NoSQL база данных, которая хранит данные в формате документов, похожих на JSON, обеспечивая высокую производительность и гибкость схемы данных.

Основные концепции MongoDB

  • Документы — записи в формате BSON (Binary JSON)
  • Коллекции — группы связанных документов
  • Базы данных — наборы коллекций
  • Поля — пары ключ-значение внутри документов

Ключевые преимущества MongoDB

  • Гибкая схема — нет жесткой структуры таблиц
  • Горизонтальное масштабирование — встроенный шардинг
  • Высокая производительность — оптимизирован для чтения и записи
  • Rich Query Language — мощные возможности запросов и фильтрации
  • Агрегационный конвейер — сложная обработка и анализ данных

Основные операции с данными

 1
 2// Вставка документа
 3db.users.insertOne({
 4name: "Иван Иванов",
 5age: 30,
 6email: "ivan@example.com",
 7skills: ["Python", "JavaScript", "MongoDB"]
 8});
 9
10// Поиск документов
11db.users.find({ age: { $gte: 18 } });
12
13// Обновление документа
14db.users.updateOne(
15{ name: "Иван Иванов" },
16{ $set: { age: 31 }, $push: { skills: "React" } }
17);
18
19// Удаление документа
20db.users.deleteOne({ name: "Иван Иванов" });

Типы индексов в MongoDB

  • Одиночные индексы — по одному полю
  • Составные индексы — по нескольким полям
  • Многоключевые индексы — для полей-массивов
  • Текстовые индексы — для полнотекстового поиска
  • Геопространственные индексы — для работы с координатами

Установка и начало работы

Установка MongoDB на различных системах:

 1
 2# Ubuntu/Debian
 3sudo apt update && sudo apt install mongodb
 4
 5# macOS через Homebrew
 6brew tap mongodb/brew
 7brew install mongodb-community
 8
 9# Через Docker
10docker run --name mongodb -d -p 27017:27017 mongo
11
12# Подключение к MongoDB
13mongo mongodb://localhost:27017

Работа с MongoDB в Python

Использование PyMongo для подключения:

1
2# Установка драйвера
3pip install pymongo
4# или через Poetry
5poetry add pymongo
6    
 1
 2from pymongo import MongoClient
 3
 4# Подключение к MongoDB
 5client = MongoClient('mongodb://localhost:27017/')
 6db = client['mydb']
 7collection = db['users']
 8
 9# Вставка документа
10user = {
11    "name": "Анна Петрова",
12    "age": 25,
13    "skills": ["Python", "Django", "MongoDB"]
14}
15result = collection.insert_one(user)
16
17# Поиск документов
18users = collection.find({"age": {"$gte": 18}})
19for user in users:
20    print(user)
21    

Агрегационный конвейер

Мощный инструмент для обработки данных:

1
2db.users.aggregate([
3{ $match: { age: { $gte: 18 } } },
4{ $group: { _id: "$department", avgAge: { $avg: "$age" } } },
5{ $sort: { avgAge: -1 } }
6]);

Часто задаваемые вопросы

Когда стоит выбрать MongoDB вместо SQL БД?

MongoDB хорошо подходит для проектов с изменяющейся схемой данных, необходимостью горизонтального масштабирования, работой с JSON-подобными данными и быстрой разработкой прототипов.

Поддерживает ли MongoDB транзакции?

Да, начиная с версии 4.0 MongoDB поддерживает ACID транзакции для операций с несколькими документами и коллекциями.