Содержание

Краткая справка по командам клиента 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 задаёт порядок сортировки по конкретному полю:

Специальный параметр $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")