db-mongodb

Fornece padrões de administração e engenharia para MongoDB baseados na documentação oficial em português (mongodb.com/pt-br/docs). Cobre modelagem de documentos (Embedding vs Referencing), motor Wired

SKILL.md

GitHub

Habilidade de IA: Engenharia e Administração de MongoDB (db-mongodb)

Esta skill orienta a inteligência artificial a atuar como especialista no banco de dados Orientado a Documentos MongoDB, fundamentada na documentação oficial (mongodb.com/pt-br/docs). Cobre estratégias avançadas de modelagem de esquemas, motor de armazenamento WiredTiger, garantias de consistência (Write/Read Concern), otimização com índices, Aggregation Framework, Replica Sets e Sharded Clusters.


🧭 Modelagem de Dados Orientada a Documentos

No MongoDB, a modelagem é orientada pelos padrões de acesso da aplicação (consultas de leitura e gravação juntas), em vez da normalização estrita:

1. Incorporação (Embedding) vs. Referência (Referencing)

  • Embutir (Desnormalização - Preferencial):
    • Utilize quando houver relacionamentos 1:1 ou 1:N (onde N é limitado e pequeno, ex: endereços de um cliente).
    • Garante atomacidade de gravação e leituras de alto desempenho em uma única operação de E/S.
  • Referenciar (Normalização):
    • Utilize quando houver relacionamentos 1:N (onde N é ilimitado ou muito grande, ex: logs de auditoria) ou N:M.
    • Evita o limite máximo de tamanho de documento do BSON (16 MB).

2. Padrões de Projeto de Esquema (Schema Design Patterns)

  • Subset Pattern: Guarda apenas os N dados mais recentes ou acessados no documento principal e o restante em uma coleção separada.
  • Bucket Pattern: Agrupa dados de séries temporais (time-series) ou métricas de IoT por janelas de tempo (ex: 1 hora) para reduzir número de documentos e otimizar índices.
  • Outlier Pattern: Trata documentos excepcionalmente grandes separadamente sem penalizar a maioria dos documentos padrão.

🛠️ Indexação Avançada e Otimização de Consultas

1. Tipos de Índices no MongoDB

  • Composto (Compound Index): Siga a regra ESR (Equality, Sort, Range):
    • 1º: Campos de igualdade exata ($eq).
    • 2º: Campos usados na ordenação (sort()).
    • 3º: Campos de intervalo ($gte, $lte, $in).
  • Multikey Index: Criado automaticamente ao indexar campos contendo arrays.
  • TTL Index: Apaga documentos automaticamente após um tempo especificado:
    db.sessions.createIndex({ "createdAt": 1 }, { expireAfterSeconds: 3600 });
    
  • Geoespacial (2dsphere): Para consultas de proximidade ($near, $geoWithin).

2. Análise com explain()

Execute sempre a explicação com modo executionStats para diagnosticar varredura de coleção (COLLSCAN):

db.orders.explain("executionStats").find({
  status: "COMPLETED",
  createdAt: { $gte: ISODate("2026-01-01") }
});

🔍 Aggregation Framework Nativo

Utilize pipelines de agregação para transformações complexas de dados de forma nativa e paralela:

db.orders.aggregate([
  // 1. Filtragem inicial usando índice
  { $match: { status: "COMPLETED", orderDate: { $gte: ISODate("2026-01-01") } } },
  
  // 2. Junção com a coleção de clientes
  {
    $lookup: {
      from: "customers",
      localField: "customerId",
      foreignField: "_id",
      as: "customer_details"
    }
  },
  
  // 3. Desfazer o array gerado pelo lookup
  { $unwind: "$customer_details" },
  
  // 4. Agrupamento e cálculo de métricas
  {
    $group: {
      _id: "$customer_details.segment",
      totalRevenue: { $sum: "$totalAmount" },
      averageOrderValue: { $avg: "$totalAmount" },
      totalOrders: { $count: {} }
    }
  },
  
  // 5. Ordenação do resultado
  { $sort: { totalRevenue: -1 } }
]);

⚙️ Concorrência, Consistência e Alta Disponibilidade

1. Consistência e Garantias de Durabilidade

  • Write Concern: Controla a confirmação da escrita pelo cluster:
    • w: "majority": Garante que a escrita foi persistida no journal da maioria dos nós do Replica Set (previne rollback no failover).
  • Read Concern:
    • rc: "majority": Retorna apenas dados confirmados pela maioria dos nós.
    • rc: "linearizable": Garante leitura estritamente em tempo real (evita leituras obsoletas).

2. Arquitetura de Produção

  • Replica Sets: Mínimo de 3 nós votantes (1 Primário e 2 Secundários) para automatizar a eleição e o failover sem indisponibilidade.
  • Sharded Cluster: Para escalabilidade horizontal em múltiplos terabytes de dados. Escolha a Shard Key com atenção para evitar jumbo chunks ou pontos quentes (hotspots) de gravação.

🔒 Hardening e Conformidade de Segurança (OWASP ASVS & CIS MongoDB Benchmark)

  • Autenticação Obrigatória e TLS:
    • Habilite autenticação de controle de acesso (security.authorization: enabled).
    • Exija conexões cifradas TLS 1.3/1.2 (net.tls.mode: requireTLS).
  • Autenticação Interna do Cluster: Utilize certificados X.509 ou chave de arquivo (keyFile) para comunicação entre nós de Replica Set ou Shards.
  • Criptografia no Nível de Campo (CSFLE - Client-Side Field Level Encryption): Cifre dados sensíveis (PII, números de cartão) no cliente usando chaves KMS antes da transmissão para o banco.
  • Validação de Esquema ($jsonSchema): Aplique Schema Validation na coleção para evitar injeção de operador NoSQL ($where, $gt: "").

🔗 Integração com Outras Skills