Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🍃 AGGREGATION FRAMEWORK E PIPELINE

Se o find() te leva de 0 a 100 na abstração rápida, o Aggregation Framework te eleva de 100 a 1000, dominando qualquer Business Intelligence complexo. 🛡️🧩


Objetivo: Extrair poder máximo de relatórios cruzados (Análises, Filtros de Etapas, Projetos de Sub-campos Arrays, Group By nativo MQL).


📗 PASSO 1: A Arquitetura do Operador de Tubulação (Pipeline)

No relacional (SQL), a leitura da CPU e Ram do servidor obedece à linearidade estrita SELECT, FROM, WHERE, GROUP BY, HAVING. Na matemática NoSQL distribuída, os dados massivos desistem das tabelas únicas, processando blocos e empurrando o resultado via "Pipeline" (Em lotes de estágios) para que uma máquina minúscula aguente trabalhar grandes Gigabytes.

📊 Ciclo de Estágios do Pipeline do BSON

flowchart LR
    M1[🎯 1. $match] --> G1[📦 2. $group]
    G1 --> P1[✂️ 3. $project]
    P1 --> S1[🔢 4. $sort]
  • $match: Filtra como o clássico WHERE e joga metade dos documentos no Lixo cedo (economiza Ram).
  • $group: O clássico GROUP BY e agregadores de soma (SUM, AVG).
  • $project: Modela quais atributos a aplicação cliente receberá (Economiza Banda/Tráfego de Internet).
  • $sort: Põe os dados em Ordem (ORDER BY).

📗 PASSO 2: Anatomia de Extração no MongoDB 7.0

Como o engenheiro descobre "Quantidade de Dinheiro da Filial SP nos últimos 7 dias?".

db.faturas.aggregate([
    
    // 1º ETAPA DO CANO: CORTA O QUE NÃO FOR DE SÃO PAULO
    { 
       $match: { filial: "SP", ano: 2026 } 
    },
    
    // 2º ETAPA: JUNTA TODOS QUE SOBRARAM SOMANDO A FATURA E AGRUPANDO PELO VENDEDOR
    { 
       $group: { 
           _id: "$vendedor", 
           faturamento_total: { $sum: "$valor_liquido" },
           total_vendas: { $sum: 1 } 
       } 
    },
    
    // 3º ETAPA: ORDENANDO O MELHOR FATURAMENTO
    {
       $sort: { faturamento_total: -1 } // -1 = DESCENDING
    }

]);

📗 PASSO 3: Cross-Joins $lookup do MQL (DBRefs Profundos)

A ideia de que "MongoDB e NoSQL não faz Join" é Fake News Arquitetônica. Através do estágio $lookup da Pipeline moderna (> MongoDB 6.0+), unimos Arrays nativamente:

/* BUSCANDO PEDIDO E SUAS REFERÊNCIAS DE FATURA EXCLUSIVA */
db.pedidos.aggregate([
   {
     $lookup: {
       from: "detalhesFatura",   // Qual a "tabela" secundária 
       localField: "faturaId",   // Onde está o ID nesse Documento A
       foreignField: "_id",      // Onde está o ID no Documento B (Fatura)
       as: "faturaCorrigida"     // Qual será o nome do Objeto Inserido Array
     }
  }
]);

💡 Nota do DBA Master: Assim que uma Collection cresce com velocidade, usar $lookup esgota a CPU (ele compara 1 doc contra milhares toda hora). Se precisar buscar juntas sempre, mude a estrutura do projeto da Empresa e faça EMBEDDING JSON direto! 🚀🛡️