MongoDB
📜 Общее описание и историческая справка
MongoDB — документоориентированная NoSQL СУБД с открытым исходным кодом. Разработка началась в 2007 году компанией 10gen (ныне MongoDB Inc.) как платформа для облачных приложений. Первый стабильный релиз вышел в 2009 году. MongoDB хранит данные в формате BSON (бинарный JSON), что позволяет гибко менять схему данных. Ключевые особенности: горизонтальное масштабирование через шардинг, репликация с автоматическим failover, агрегационный фреймворк, мощная система запросов. В 2018 году MongoDB сменила лицензию на Server Side Public License (SSPL) в ответ на использование её кода облачными провайдерами без вклада в развитие. Сегодня MongoDB является одной из самых популярных NoSQL СУБД.
Источники: История MongoDB, книга "MongoDB: The Definitive Guide" (Kristina Chodorow).
🏭 Область применения и рекомендации
MongoDB идеально подходит для:
- Систем с гибкой схемой данных (быстрая разработка).
- Больших данных и высоких нагрузок на запись.
- Приложений, где требуется горизонтальная масштабируемость.
- Хранения иерархических данных, каталогов товаров, журналов событий.
Рекомендации: избегайте MongoDB, если для приложения критичны сложные транзакции с несколькими коллекциями (хотя транзакции поддерживаются с версии 4.0) или требуется строгая согласованность на уровне SQL.
🛠️ Как создать/инициировать базу
# Запустить сервер (в терминале)
mongod --dbpath /data/db
# Подключиться через клиент mongo
mongo
# Создать базу (переключиться на неё)
use mydb
# Создать коллекцию и вставить документ
db.users.insertOne({ name: "Alice", age: 30, email: "alice@example.com" })
В драйверах (Node.js, Python и др.) база создаётся при первом обращении к ней.
💡 Основные нюансы языка (MongoDB Query Language)
MongoDB использует JSON-подобный язык запросов:
- Запросы строятся как документы с операторами:
$eq,$gt,$in,$regexи т.д. - Агрегационный конвейер (aggregation pipeline) — мощный инструмент для обработки данных (стадии:
$match,$group,$lookupи др.). - Поддержка индексов (одиночные, составные, текстовые, геопространственные).
- Транзакции, аналогичные реляционным, доступны для нескольких документов с версии 4.0.
- Для обновления используются операторы
$set,$inc,$pushи др.
🔑 Наборы ключевых команд (mongo shell)
-- Показать все базы
show dbs
-- Переключиться на базу
use mydb
-- Показать коллекции
show collections
-- Найти все документы
db.users.find().pretty()
-- Обновить документ
db.users.updateOne({ name: "Alice" }, { $set: { age: 31 } })
-- Удалить документ
db.users.deleteOne({ name: "Bob" })
-- Создать индекс
db.users.createIndex({ email: 1 })
📊 Построение запросов (сложные примеры)
Агрегация с группировкой и вычислением среднего:
db.sales.aggregate([
{ $match: { date: { $gte: ISODate("2023-01-01") } } },
{ $group: { _id: "$product", avgAmount: { $avg: "$amount" }, total: { $sum: 1 } } },
{ $sort: { avgAmount: -1 } }
])
Lookup (аналог JOIN) между коллекциями orders и customers:
db.orders.aggregate([
{
$lookup: {
from: "customers",
localField: "customerId",
foreignField: "_id",
as: "customerInfo"
}
},
{ $unwind: "$customerInfo" }
])
Текстовый поиск с сортировкой по релевантности:
db.articles.createIndex({ content: "text" });
db.articles.find({ $text: { $search: "database performance" } },
{ score: { $meta: "textScore" } })
.sort({ score: { $meta: "textScore" } });
📚 Ссылки на документы, статьи, книги
- Официальная документация MongoDB
- Книга: Kristina Chodorow. "MongoDB: The Definitive Guide" (O'Reilly, 2013).
- Книга: Shannon Bradshaw, Eoin Brazil, Kristina Chodorow. "MongoDB: The Definitive Guide, 3rd Edition" (O'Reilly, 2019).
- Статья: Блог MongoDB на Habr.
- Ресурс: MongoDB University – бесплатные курсы.