Files
mongo-index-helper/CLAUDE.md
pronchev b03dc9849f feat: smart index diffing on import
Compare desired indexes against existing ones before applying changes:
- skip indexes that are already up to date
- drop and recreate if definition changed
- handle key conflicts (same key, different name)
- drop obsolete indexes not present in the JSON

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 13:01:55 +03:00

43 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` при каждом запуске.
## Поведение импорта
- Если коллекция не существует — создаётся автоматически
- Индексы сравниваются с существующими перед применением:
- Совпадает по имени и определению — пропускается
- Совпадает по имени, но определение изменилось — дропается и пересоздаётся
- Совпадает по ключу, но имя другое — старый дропается, создаётся новый с нужным именем
- Есть в БД, но отсутствует в JSON — дропается как устаревший
- `--dry-run` показывает все планируемые действия без их выполнения