# mongo-index-helper Bash-скрипты для экспорта и импорта схемы индексов MongoDB. Работают внутри контейнера mongo через `mongosh`. ## Требования - `mongosh` (входит в официальный образ `mongo:5+`) ## Использование ### Экспорт ```bash ./export-indexes.sh --uri --db --output ``` | Параметр | Описание | Обязательный | |------------|---------------------------------|:------------:| | `--uri` | MongoDB connection URI | да | | `--db` | Имя базы данных | да | | `--output` | Путь к выходному JSON-файлу | да | **Пример:** ```bash ./export-indexes.sh \ --uri "mongodb://admin:secret@localhost:27017/admin" \ --db mydb \ --output indexes.json ``` ### Импорт ```bash ./import-indexes.sh --uri --db --input [--dry-run] ``` | Параметр | Описание | Обязательный | |-------------|-------------------------------------------------------|:------------:| | `--uri` | MongoDB connection URI | да | | `--db` | Имя базы данных | да | | `--input` | Путь к входному JSON-файлу | да | | `--dry-run` | Показать планируемые действия без реального выполнения | нет | **Примеры:** ```bash # Предварительный просмотр ./import-indexes.sh \ --uri "mongodb://admin:secret@localhost:27017/admin" \ --db mydb \ --input indexes.json \ --dry-run # Реальный импорт ./import-indexes.sh \ --uri "mongodb://admin:secret@localhost:27017/admin" \ --db mydb \ --input indexes.json ``` ## Формат файла Индексы сохраняются в JSON без указания имени БД: ```json { "users": [ { "key": { "email": 1 }, "name": "email_1", "unique": true }, { "key": { "createdAt": 1 }, "name": "createdAt_1", "expireAfterSeconds": 2592000 } ], "orders": [ { "key": { "userId": 1, "status": 1 }, "name": "userId_1_status_1" } ] } ``` ## Поведение импорта - Коллекция не существует → создаётся автоматически - Индексы сравниваются с существующими перед применением: - Совпадает по имени и определению → пропускается - Совпадает по имени, но определение изменилось → дропается и пересоздаётся - Совпадает по ключу, но имя другое → старый дропается, создаётся с новым именем - Есть в БД, но отсутствует в JSON → дропается как устаревший - Индекс `_id_` игнорируется при экспорте и импорте