2026-04-01 11:50:03 +03:00
|
|
|
|
# mongo-index-helper
|
|
|
|
|
|
|
|
|
|
|
|
Два bash-скрипта для экспорта и импорта схемы индексов MongoDB. Предназначены для запуска внутри контейнера mongo.
|
|
|
|
|
|
|
|
|
|
|
|
## Скрипты
|
|
|
|
|
|
|
|
|
|
|
|
- `export-indexes.sh` — экспортирует индексы всех коллекций указанной БД в JSON-файл
|
|
|
|
|
|
- `import-indexes.sh` — импортирует индексы из JSON-файла в указанную БД
|
|
|
|
|
|
|
|
|
|
|
|
## Технические детали
|
|
|
|
|
|
|
|
|
|
|
|
- Требуют `mongosh` (доступен в официальном образе mongo 5+)
|
|
|
|
|
|
- Встроенный JavaScript передаётся через временный `.js`-файл в `/tmp`, который удаляется после выполнения
|
|
|
|
|
|
- Переменные среды `MONGO_DB`, `DRY_RUN`, `INDEXES_JSON` используются для передачи параметров в JS-код внутри mongosh
|
|
|
|
|
|
- Индекс `_id_` пропускается при экспорте и импорте
|
|
|
|
|
|
- Поля `v` и `ns` удаляются из экспортируемых индексов (служебные, не нужны при создании)
|
|
|
|
|
|
|
|
|
|
|
|
## Формат JSON
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"collectionName": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"key": { "field": 1 },
|
|
|
|
|
|
"name": "index_name",
|
|
|
|
|
|
"unique": true
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Имя БД в файл не сохраняется — передаётся параметром `--db` при каждом запуске.
|
|
|
|
|
|
|
|
|
|
|
|
## Поведение импорта
|
|
|
|
|
|
|
|
|
|
|
|
- Если коллекция не существует — создаётся автоматически
|
2026-04-01 13:01:55 +03:00
|
|
|
|
- Индексы сравниваются с существующими перед применением:
|
|
|
|
|
|
- Совпадает по имени и определению — пропускается
|
|
|
|
|
|
- Совпадает по имени, но определение изменилось — дропается и пересоздаётся
|
|
|
|
|
|
- Совпадает по ключу, но имя другое — старый дропается, создаётся новый с нужным именем
|
|
|
|
|
|
- Есть в БД, но отсутствует в JSON — дропается как устаревший
|
2026-04-01 11:50:03 +03:00
|
|
|
|
- `--dry-run` показывает все планируемые действия без их выполнения
|