Files

96 lines
3.3 KiB
Markdown
Raw Permalink Normal View History

2026-04-01 11:50:03 +03:00
# mongo-index-helper
Bash-скрипты для экспорта и импорта схемы индексов MongoDB. Работают внутри контейнера mongo через `mongosh`.
## Требования
- `mongosh` (входит в официальный образ `mongo:5+`)
## Использование
### Экспорт
```bash
./export-indexes.sh --uri <uri> --db <dbname> --output <file>
```
| Параметр | Описание | Обязательный |
|------------|---------------------------------|:------------:|
| `--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 <uri> --db <dbname> --input <file> [--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 → дропается как устаревший
2026-04-01 11:50:03 +03:00
- Индекс `_id_` игнорируется при экспорте и импорте