Содержание
Краткая справка по командам клиента MongoDB
Получение дампа БД mongo
Настройка используемого контейнера mongoDB предполагает, что по умолчанию дамп будет выполнен в подкаталог /dump. В этот подкаталог при запуске контейнера должен быть проброшен подкаталог из файловой системы хоста.
При выполнении дампа конкретной БД в подкаталоге /dump будет создан подкаталог с именем, совпадающем с именем БД. Внутри этогоподкаталога будут созданы файлы, содержащие коллекции. Каждая коллекция представлена двумя файлами (структура и собственно данные).
Порядок действий.
1. Зайти в подкаталог, содержащий файл ,yaml контейнера
2. Убрать из подкаталога /dump подкаталоги с теми БД, дампы которых планируется сделать, если они там уже присутствуют
2. Дать команду
docker-compose exec mongodb mongodump --db dbrobo
Здесь mongodb — это имя контейнера; mongodump — собственно команда получения дампа; dbrobo — имя дампируемой БД.
Получившийся подкаталог
/dump/dbrobo
может быть скопирован на другой сервер с помощью scp.
Восстановление БД mongo из дампа
Справедливы все предварительные замечания из раздела «Получение дампа БД mongo». Дамп для восстановления ожидается в подкаталоге /dump контейнера.
Порядок действий.
1. Зайти в подкаталог, содержащий файл ,yaml контейнера
2. Дать команду
docker-compose exec mongodb mongorestore ./dump
Здесь mongodb — это имя контейнера; mongorestore — собственно команда восстановления из дампа; ./dump — подкаталог с дампом.
Причём, в подкаталоге могут быть дампы сразу нескольких БД.
Подключение к клиенту
Запуск клиента из командной строки
mongo
Если речь идёт о контейнере, то предварительно необходимо войти в запущенный контейнер. Например:
docker-compose exec mongodb /bin/bash
Здесь mongodb — это имя контейнера. При этом предполагается, что в текущем подкаталоге присутствует соответствующий файл .yaml
Выбор конкретной коллекции/БД
После подключения необходимо выбрать коллекцию
show dbs use dbrobo show collections
Здесь dbrobo — конкретная БД, содержащая коллекции документов (аналог таблиц в реляционных БД). Команда show позволяет увидеть список доступных, например:
admins calibration data devices objects sequences
Примеры команд для различных манипуляций с данными в коллекциях
Просмотр коллекции и поиск конкретных записей
Просмотр всей коллекции (вывод полной таблицы):
db.devices.find() db.devices.find().limit(1)
Поиск нужного прибора
db.devices.find({"uName":"Hydra-Lite"})
db.devices.find({"uName":"Hydra-Lite","serial":"19"})
Поиск нужной записи о калибровках
db.calibration.find({"uName":"Hydra-Lite","serial":"01"}).limit(1)
Выборка записей по критерию с ограничением количества строк в результате
db.data.find({"Date":/2024-12-27/}).sort({$natural:-1}).limit(10)
Если задано слишком много, то it позволит посмотреть следующий экран.
Аргумент метода sort задаёт порядок сортировки по конкретному полю:
- 1 — по возрастанию;
- -1 — по убыванию
Специальный параметр $natural позволяет выводить записи в порядке добавления в коллекцию, либо в обратном порядке.
Удалить конкретную запись
Здесь важно, что критерием может быть любое поле и в общем случае (при повторе полей в записях коллекции) результат может оказаться неожиданным, но есть специальное поле «_id», которое гарантированно уникально в каждой записи одной коллекции. Нужное значение поля ищется через …find() (см. выше).
db.devices.deleteOne({"_id":115})
Пример вставки записи о калибровочных коэффициентах
Пример для полинома степени 1 (коэффициенты a0, a1):
db.calibration.insertOne({ "uName" : "Hydra-Lite", "serial" : "20", "sensors" : [ { "sensor" : "BME280_pressure", "calibr" : [ { "datetime" : "2025-01-04 22:22:00", "data" : { "n" : NumberLong(1), "ai" : [ 1.19, 1 ] } } ] }, { "sensor" : "BME280_humidity", "calibr" : [ { "datetime" : "2025-01-04 22:22:00", "data" : { "n" : NumberLong(1), "ai" : [ 12.1, 1 ] } } ] }, { "sensor" : "BME280_temp", "calibr" : [ { "datetime" : "2025-01-04 22:22:00", "data" : { "n" : NumberLong(1), "ai" : [ -0.62, 1 ] } } ] } ], "_class" : "com.mgul.dbrobo.models.Calibration" })
Здесь главное — проследить за полями datetime. Коэффициенты будут считаться значащими строго ПОСЛЕ этой временной отметки.
Управление индексами коллекций
Индексы позволяют существенно ускорить обработку коллекций.
Просмотр текущих индексов
db.calibration.getIndexes()
Создание нового индекса:
db.data.createIndex({ "dateForCalculation" : 1 })
db.calibration.createIndex({"uName":1,"serial":1})
Удаление ненужного индекса:
db.data.dropIndex("Date_1")
