Полное руководство по MongoDB: от основ до работы с JSON
Основные команды по управлению базой данных MongoDB. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов
Categories:
Оглавление
- Введение в MongoDB
- Установка MongoDB
- Подключение к базе
- Основные операции CRUD
- Работа с коллекциями
- Запросы и агрегации
- Индексы и оптимизация
- Транзакции
- Работа с JSON
- Интеграция с языками программирования
- Безопасность и администрирование
- Резервное копирование
1. Введение в MongoDB
MongoDB — это NoSQL-база данных, которая хранит данные в документах JSON-подобного формата (BSON).
🔹 Ключевые особенности:
- Гибкая схема (документы могут иметь разную структуру)
- Горизонтальная масштабируемость (шардирование)
- Поддержка сложных запросов и агрегаций
- Встроенная работа с JSON
🔹 Основные понятия:
- Документ ≈ строка в SQL (хранится в BSON)
- Коллекция ≈ таблица в SQL
- База данных ≈ схема в SQL
2. Установка MongoDB
Linux (Ubuntu/Debian)
# Импорт ключа и добавление репозитория
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -sc)/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
# Установка MongoDB
sudo apt update
sudo apt install mongodb-org
# Запуск сервиса
sudo systemctl start mongod
sudo systemctl enable mongod
Windows
- Скачайте установщик с официального сайта
- Запустите
.msi
файл - Добавьте
C:\Program Files\MongoDB\Server\<версия>\bin
вPATH
MacOS (Homebrew)
brew tap mongodb/brew
brew install mongodb-community
brew services start mongodb-community
Проверка работы
mongosh # Запуск оболочки MongoDB
3. Подключение к базе
Через mongosh
(CLI)
mongosh "mongodb://localhost:27017" # Локальное подключение
mongosh "mongodb://user:pass@host:27017/dbname" # С аутентификацией
В Node.js (драйвер mongodb
)
const { MongoClient } = require('mongodb');
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);
async function connect() {
try {
await client.connect();
console.log("Connected to MongoDB");
const db = client.db("mydb");
const collection = db.collection("users");
// ... операции с коллекцией
} finally {
await client.close();
}
}
connect();
4. Основные операции CRUD
Вставка документов (insertOne
, insertMany
)
// Вставка одного документа
db.users.insertOne({
name: "Alice",
age: 25,
skills: ["JavaScript", "MongoDB"]
});
// Вставка нескольких документов
db.users.insertMany([
{ name: "Bob", age: 30 },
{ name: "Charlie", age: 22 }
]);
Поиск (find
, findOne
)
// Найти всех пользователей
db.users.find();
// Найти пользователей старше 25
db.users.find({ age: { $gt: 25 } });
// Найти первого пользователя с именем "Alice"
db.users.findOne({ name: "Alice" });
Обновление (updateOne
, updateMany
)
// Обновить возраст Alice
db.users.updateOne(
{ name: "Alice" },
{ $set: { age: 26 } }
);
// Увеличить возраст всех пользователей на 1
db.users.updateMany(
{},
{ $inc: { age: 1 } }
);
Удаление (deleteOne
, deleteMany
)
// Удалить пользователя Bob
db.users.deleteOne({ name: "Bob" });
// Удалить всех младше 18
db.users.deleteMany({ age: { $lt: 18 } });
5. Работа с коллекциями
Создание и удаление коллекций
// Создать коллекцию
db.createCollection("products");
// Удалить коллекцию
db.products.drop();
Переименование коллекции
db.products.renameCollection("items");
6. Запросы и агрегации
Операторы сравнения
db.users.find({ age: { $gt: 20, $lte: 30 } }); // Возраст > 20 и ≤ 30
db.users.find({ name: { $regex: /^A/ } }); // Имя начинается на "A"
Агрегация ($match
, $group
, $sort
)
db.orders.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$customer", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } }
]);
7. Индексы и оптимизация
Создание индекса
db.users.createIndex({ email: 1 }); // Уникальный индекс
db.users.createIndex({ name: "text" }); // Текстовый поиск
Просмотр индексов
db.users.getIndexes();
8. Транзакции
const session = client.startSession();
try {
session.startTransaction();
await db.users.updateOne(
{ name: "Alice" },
{ $inc: { balance: -100 } },
{ session }
);
await db.users.updateOne(
{ name: "Bob" },
{ $inc: { balance: 100 } },
{ session }
);
await session.commitTransaction();
} catch (e) {
await session.abortTransaction();
} finally {
session.endSession();
}
9. Работа с JSON
Экспорт данных в JSON
mongoexport --db=mydb --collection=users --out=users.json --jsonArray
Импорт JSON в MongoDB
mongoimport --db=mydb --collection=users --file=users.json --jsonArray
Запросы к JSON-полям
db.users.find({
"address.city": "New York" // Обращение к вложенным полям
});
10. Интеграция с языками
Python (PyMongo)
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
db = client["mydb"]
collection = db["users"]
collection.insert_one({"name": "Alice"})
Go (MongoDB Driver)
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("mongodb://localhost:27017"))
collection := client.Database("mydb").Collection("users")
_, err = collection.InsertOne(context.TODO(), bson.D{{"name", "Alice"}})
11. Безопасность
Включение аутентификации
use admin
db.createUser({
user: "admin",
pwd: "securepassword",
roles: ["root"]
});
Запуск MongoDB с аутентификацией
mongod --auth
12. Резервное копирование
Экспорт (mongodump
)
mongodump --db=mydb --out=/backup
Восстановление (mongorestore
)
mongorestore --db=mydb /backup/mydb
Заключение
MongoDB — мощная NoSQL-база, идеальная для:
- Гибких схем данных
- Масштабируемых приложений
- Работы с JSON
📌 Документация: https://docs.mongodb.com