🍃 MongoDB
Документы, коллекции, CRUD, фильтры, агрегации, индексы и mongosh.
Шпаргалки · Данные · #mongodb #nosql #documents
Подключение (mongosh)
mongosh "mongodb://localhost:27017/mydb"
show dbs; use mydb; show collections
Понятия
| Термин | Аналог в SQL |
|---|---|
| Database | база |
| Collection | таблица |
| Document (BSON) | строка |
_id |
первичный ключ (ObjectId) |
CRUD
db.users.insertOne({ name: "Аня", age: 30, tags: ["a", "b"] })
db.users.insertMany([{ name: "Борис" }, { name: "Вера" }])
db.users.find({ age: { $gte: 18 } }, { name: 1, _id: 0 }).sort({ age: -1 }).limit(10)
db.users.findOne({ name: "Аня" })
db.users.updateOne({ name: "Аня" }, { $set: { age: 31 }, $inc: { visits: 1 } })
db.users.updateMany({}, { $unset: { tmp: "" } })
db.users.replaceOne({ _id: id }, { name: "Новая" })
db.users.deleteOne({ name: "Борис" })
db.users.deleteMany({ age: { $lt: 18 } })
db.users.countDocuments({ age: { $gt: 20 } })
Операторы
| Группа | Операторы |
|---|---|
| Сравнение | $eq $ne $gt $gte $lt $lte $in $nin |
| Логика | $and $or $not $nor |
| Элемент | $exists $type |
| Массивы | $all $elemMatch $size |
| Обновление | $set $unset $inc $push $pull $addToSet $rename |
| Текст и регулярки | $regex, $text |
Агрегации
db.orders.aggregate([
{ $match: { status: "paid" } },
{ $group: { _id: "$userId", total: { $sum: "$amount" }, n: { $sum: 1 } } },
{ $sort: { total: -1 } },
{ $limit: 5 },
{ $lookup: { from: "users", localField: "_id", foreignField: "_id", as: "user" } }
])
Этапы: $match, $group, $project, $sort, $limit, $skip, $unwind, $lookup (аналог JOIN), $addFields.
Индексы
db.users.createIndex({ email: 1 }, { unique: true })
db.users.createIndex({ city: 1, age: -1 })
db.users.getIndexes()
db.users.find({ email: "a@x.ru" }).explain("executionStats")
Приёмы
- Данные, которые читаются вместе, храните в одном документе (встраивание); для связей «один ко многим» с большим числом связанных записей используйте ссылки.
- Транзакции с несколькими документами:
session.withTransaction(...)(нужен replica set). - Резервные копии:
mongodump/mongorestore.