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

2.3 KiB
Raw Blame History

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

{
  "collectionName": [
    {
      "key": { "field": 1 },
      "name": "index_name",
      "unique": true
    }
  ]
}

Имя БД в файл не сохраняется — передаётся параметром --db при каждом запуске.

Поведение импорта

  • Если коллекция не существует — создаётся автоматически
  • Индексы сравниваются с существующими перед применением:
    • Совпадает по имени и определению — пропускается
    • Совпадает по имени, но определение изменилось — дропается и пересоздаётся
    • Совпадает по ключу, но имя другое — старый дропается, создаётся новый с нужным именем
    • Есть в БД, но отсутствует в JSON — дропается как устаревший
  • --dry-run показывает все планируемые действия без их выполнения