$ command-helper

MongoDB

mongosh, запросы и обновления, индексы, агрегация, бэкапы mongodump и диагностика.

Потребуется вход через Google

Подключение

Подключиться по 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()