MongoDB
mongosh, запросы и обновления, индексы, агрегация, бэкапы mongodump и диагностика.
Подключение
Подключиться по connection string
mongosh "mongodb://<user>@<host>:27017/<database>?authSource=admin"
Список баз
show dbsВыбрать базу
use <database>
Список коллекций
show collectionsЗапросы
Найти документы по полю
db.<collection>.find({ status: "active" }).limit(10)
Найти один по _id
db.<collection>.findOne({ _id: ObjectId("<id>") })
Сравнение и выбор полей
db.<collection>.find({ age: { $gte: 18 } }, { name: 1, email: 1 })
Сортировка, пропуск и лимит
db.<collection>.find().sort({ createdAt: -1 }).skip(20).limit(10)
Посчитать документы
db.<collection>.countDocuments({ status: "active" })
Уникальные значения поля
db.<collection>.distinct("status")
Изменение данных
Вставить документ
db.<collection>.insertOne({ name: "Alice", createdAt: new Date() })
Обновить поле
db.<collection>.updateOne({ _id: ObjectId("<id>") }, { $set: { status: "done" } })
Обновить много документов
db.<collection>.updateMany({ status: "new" }, { $set: { status: "pending" } })
Удалить документы
db.<collection>.deleteMany({ status: "archived" })
Индексы и агрегация
Создать индекс
db.<collection>.createIndex({ email: 1 }, { unique: true })
Список индексов
db.<collection>.getIndexes()
План выполнения запросапродвинутая
db.<collection>.find({ email: "a@b.c" }).explain("executionStats")
Группировка и подсчётпродвинутая
db.<collection>.aggregate([ { $match: { status: "active" } }, { $group: { _id: "$country", count: { $sum: 1 } } }, { $sort: { count: -1 } } ])
Бэкапы и диагностика
Дамп базы
mongodump --uri "mongodb://<user>@<host>:27017/<database>?authSource=admin" --gzip --archive=<database>.gz
Восстановить дамп
mongorestore --uri "mongodb://<user>@<host>:27017" --gzip --archive=<database>.gz
Размер и статистика коллекциипродвинутая
db.<collection>.stats({ scale: 1024 * 1024 })
Операции, которые идут дольше 5 секундпродвинутая
db.currentOp({ active: true, secs_running: { $gt: 5 } })Прервать операциюпродвинутая
db.killOp(<opid>)
Статус replica setпродвинутая
rs.status()