Работа с MongoDB — моделирование документов (embed vs reference), паттерны схем, индексы (составные/multikey/text/TTL/wildcard), aggregation pipeline, транзакции, replica set и sharding, антипаттерны. Use при работе с MongoDB/документной БД, проектировании коллекций или оптимизации запросов и агрегаций.
Installs into .claude/skills of the current project.
Are you the author of Mongodb?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/vitammiin-mongodb)
---
name: mongodb
description: Работа с MongoDB — моделирование документов (embed vs reference), паттерны схем, индексы (составные/multikey/text/TTL/wildcard), aggregation pipeline, транзакции, replica set и sharding, антипаттерны. Use при работе с MongoDB/документной БД, проектировании коллекций или оптимизации запросов и агрегаций.
---
# Навык: MongoDB
Документная БД для гибкой схемы, иерархических данных и высокой скорости итераций. Схема есть — просто она в коде.
## Когда уместна (vs PostgreSQL)
- Хорошо: агрегаты, читаемые целиком (профиль, заказ с позициями), гибкие/эволюционирующие поля, высокая нагрузка на запись, гео/каталоги.
- Плохо: сильносвязанные данные с множеством JOIN, жёсткие транзакции между многими сущностями, отчётность произвольными срезами — там реляционка.
## Моделирование: embed vs reference
- **Embed** (вкладывай), если данные читаются вместе, отношение «содержит», размер ограничен. Правило: *data that is accessed together should be stored together*.
- **Reference** (ссылайся), если данные растут без границы, переиспользуются, или обновляются независимо. Связка через `_id` + `$lookup` при необходимости.
- Дизайн идёт **от запросов** (query-driven), а не от нормализации.
## Паттерны схем
- **Bucket** — группировать time-series/события в документы-корзины. **Computed** — хранить предподсчитанные агрегаты. **Subset** — во вложении держать только горячую часть, остальное в отдельной коллекции. **Extended Reference** — дублировать часто читаемые поля из связанной сущности. **Outlier** — спец-обработка редких «толстых» документов.
## Индексы
- **Составной** (порядок по правилу ESR: Equality → Sort → Range). **Multikey** — по массивам. **Text** — поиск по тексту. **TTL** — авто-удаление по времени. **Wildcard** — под непредсказуемые поля. **Partial**/**unique**.
- Проверяй планы через `explain("executionStats")`: цель — `IXSCAN`, а не `COLLSCAN`; следи за `totalDocsExamined` ≈ `nReturned`.
## Aggregation pipeline
- Этапы: `$match` (раньше всех, чтобы задействовать индекс) → `$project` → `$group` → `$sort` → `$lookup` → `$facet`.
- `$match`/`$sort` до `$group`; тяжёлые `$lookup` — точечно; следи за лимитом памяти этапа (`allowDiskUse` при необходимости).
## Транзакции и консистентность
- Многодокументные ACID-транзакции есть (replica set/sharded), но дороги — предпочитай атомарность одного документа (обновляй агрегат целиком).
- **Write concern** (`w:"majority"`) и **read concern** — под требования долговечности/консистентности.
## Масштаб
- **Replica set** — отказоустойчивость и чтение с реплик. **Sharding** — горизонтальный масштаб; ключ шардирования выбирай под равномерность и запросы (плохой ключ = горячие чанки, его не сменить дёшево).
## Антипаттерны
- Безграничные растущие массивы в документе (лимит 16MB); «реляционка на Mongo» (много коллекций + ручные JOIN); massive documents; отсутствие индексов под фактические запросы; шардинг-ключ по монотонному полю.
## Через MCP
MCP-сервер `mongodb` (`mongodb-mcp-server`) — инспекция коллекций/индексов, запросы и агрегации, `explain`. Для аудита используй режим `--readOnly`. Любые записи/дроп-операции — только с подтверждением человека.