mongodb

Работа с MongoDB — моделирование документов (embed vs reference), паттерны схем, индексы (составные/multikey/text/TTL/wildcard), aggregation pipeline, транзакции, replica set и sharding, антипаттерны.

SKILL.md

GitHub

Capability 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. Любые записи/дроп-операции — только с подтверждением человека.