Aggregation

A Aggregation Framework no MongoDB é uma poderosa ferramenta para realizar operações de transformação de dados em documentos dentro de uma coleção. Ele permite que você processe e transfira os dados de maneiras complexas e flexíveis. As operações de agregação podem incluir filtragem, projeção, ordenação, agrupamento, cálculos aritméticos, operações em arrays e muito mais.

O pipeline de agregação é uma série de estágios (ou operadores) que você aplica aos documentos de entrada para obter os resultados desejados. Cada estágio do pipeline executa uma operação específica. Alguns dos operadores de estágio mais comuns incluem:

  1. $match: Filtra os documentos com base em critérios de consulta.

    Exemplo:

    db.collection.aggregate([
      { $match: { age: { $gte: 18 } } }
    ])
    
  2. $project: Permite criar campos computados ou modificar a estrutura do documento.

    Exemplo:

    db.collection.aggregate([
      { $project: { name: 1, age: 1, _id: 0 } }
    ])
    
  3. $group: Agrupa os documentos com base em uma chave especificada e executa operações de acumulação.

    Exemplo:

    db.collection.aggregate([
      { $group: { _id: "$category", total: { $sum: 1 } } }
    ])
    
  4. $sort: Ordena os documentos.

    Exemplo:

    db.collection.aggregate([
      { $sort: { age: -1 } }
    ])
    
  5. $lookup: Realiza uma operação de junção entre duas coleções.

    Exemplo:

    db.orders.aggregate([
      {
        $lookup: {
          from: "products",
          localField: "product_id",
          foreignField: "_id",
          as: "productDetails"
        }
      }
    ])
    
  6. $unwind: Desconstrói um campo de array a fim de produzir um documento para cada elemento no array.

    Exemplo:

    db.collection.aggregate([
      { $unwind: "$tags" }
    ])
    
  7. $lookup with pipeline: Realiza uma operação de junção mais complexa com um pipeline para a coleção de junção.

    Exemplo:

    db.orders.aggregate([
      {
        $lookup: {
          from: "products",
          let: { order_item: "$item" },
          pipeline: [
            {
              $match: {
                $expr: { $eq: ["$name", "$$order_item"] }
              }
            }
          ],
          as: "productDetails"
        }
      }
    ])
    

Estes são apenas alguns exemplos de operadores de estágio que você pode usar no pipeline de agregação. Você pode combinar vários estágios em um pipeline para realizar operações complexas e criar consultas poderosas. Para obter mais informações sobre a Aggregation Framework no MongoDB, consulte a documentação oficial: Aggregation - MongoDB Manual.