MongoDB: NoSQL база данных для современного стека
# MongoDB: NoSQL база данных для современного стека
## Введение
MongoDB - документно-ориентированная NoSQL база данных, которая хранит данные в формате BSON (бинарный JSON). Идеально подходит для гибких схем данных.
## Установка
```bash
# Ubuntu/Debian
sudo apt-get install mongodb
# macOS
brew install mongodb-community
# Docker
docker run -d -p 27017:27017 mongo:latest
```
## Основные операции
### Создание документа
```javascript
db.users.insertOne({
name: "John",
email: "john@example.com",
age: 30
});
```
### Поиск
```javascript
// Найти всех
db.users.find();
// С условием
db.users.find({ age: { $gt: 25 } });
// Сортировка
db.users.find().sort({ age: -1 });
```
### Обновление
```javascript
db.users.updateOne(
{ name: "John" },
{ $set: { age: 31 } }
);
```
## Агрегации
```javascript
db.orders.aggregate([
{ $match: { status: "completed" } },
{ $group: {
_id: "$customer",
total: { $sum: "$amount" }
}
},
{ $sort: { total: -1 } }
]);
```
## Индексы
```javascript
// Создание индекса
db.users.createIndex({ email: 1 });
// Составной индекс
db.users.createIndex({ name: 1, age: -1 });
// Проверка индексов
db.users.getIndexes();
```
## Интеграция с Node.js
```javascript
const mongoose = require('mongoose');
// Подключение
mongoose.connect('mongodb://localhost:27017/mydb');
// Схема
const userSchema = new mongoose.Schema({
name: String,
email: String,
age: Number
});
// Модель
const User = mongoose.model('User', userSchema);
// Использование
const user = new User({ name: 'John', email: 'john@example.com' });
await user.save();
```
## Интеграция с Python (PyMongo)
```python
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['users']
# Вставка
collection.insert_one({'name': 'John', 'email': 'john@example.com'})
# Поиск
user = collection.find_one({'name': 'John'})
```
## Репликация
MongoDB поддерживает репликацию для высокой доступности:
```javascript
// Настройка replica set
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "mongodb1:27017" },
{ _id: 1, host: "mongodb2:27017" },
{ _id: 2, host: "mongodb3:27017" }
]
});
```
## Лучшие практики
1. Используйте индексы для часто запрашиваемых полей
2. Ограничивайте размер документов (16MB максимум)
3. Используйте агрегации для сложных запросов
4. Настраивайте репликацию для production
5. Регулярно делайте бэкапы
## Заключение
MongoDB - отличный выбор для приложений с гибкой схемой данных. Правильное использование обеспечит высокую производительность и масштабируемость.