mongodb
Работа с MongoDB — моделирование документов (embed vs reference), паттерны схем, индексы (составные/multikey/text/TTL/wildcard), aggregation pipeline, транзакции, replica set и sharding, антипаттерны.
Files1
View on GitHubSKILL.mdskills/mongodb/SKILL.md
GitHubCapability discovery
Названия MCP/tools и CLI ниже — примеры, а не требования к пользовательской конфигурации. Сначала найди доступные capabilities текущей сессии и проверь их фактические schemas/permissions. Не устанавливай серверы, не переписывай подключения, env, ключи, providers или модели. Команды настройки выполняются только по отдельному явному запросу; отсутствие MCP не блокирует независимую локальную работу.
Навык: 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. Любые записи/дроп-операции — только с подтверждением человека.