Come utilizzare la pipeline di aggregazione in MongoDB

Come utilizzare la pipeline di aggregazione in MongoDB
I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

La pipeline di aggregazione è il modo consigliato per eseguire query complesse in MongoDB. Se utilizzi MapReduce di MongoDB, è meglio passare alla pipeline di aggregazione per calcoli più efficienti.





MUO Video della giornata SCORRI PER CONTINUARE CON IL CONTENUTO

Cos'è l'aggregazione in MongoDB e come funziona?

  Schizzo del processo della pipeline di aggregazione

La pipeline di aggregazione è un processo in più fasi per l'esecuzione avanzata query in MongoDB . Elabora i dati attraverso diverse fasi chiamate pipeline. È possibile utilizzare i risultati generati da un livello come modello di operazione in un altro.





Ad esempio, puoi passare il risultato di un'operazione di corrispondenza a un'altra fase per ordinarlo in quell'ordine finché non ottieni l'output desiderato.





Ogni fase di una pipeline di aggregazione presenta un operatore MongoDB e genera uno o più documenti trasformati. A seconda della query, un livello può apparire più volte nella pipeline. Ad esempio, potrebbe essere necessario utilizzare il file $conteggio O $ordina l'operatore esegue più fasi nella pipeline di aggregazione.

come riparare la schermata blu di Windows 10?

Le fasi della pipeline di aggregazione

La pipeline di aggregazione passa i dati attraverso più fasi in un'unica query. Esistono diverse fasi e puoi trovare i loro dettagli nella Documentazione MongoDB .



Di seguito definiamo alcuni di quelli più comunemente utilizzati.

La fase $match

Questa fase consente di definire condizioni di filtraggio specifiche prima di avviare le altre fasi di aggregazione. Puoi utilizzarlo per selezionare i dati corrispondenti che desideri includere nella pipeline di aggregazione.





La fase a gironi

La fase a gironi separa i dati in diversi gruppi in base a criteri specifici utilizzando coppie chiave-valore. Ciascun gruppo rappresenta una chiave nel documento di output.

Ad esempio, considera quanto segue saldi dati di esempio:





  Dati di esempio, ad esempio

Utilizzando la pipeline di aggregazione, puoi calcolare il conteggio totale delle vendite e le vendite principali per ciascuna sezione di prodotto:

 { 
$group: {
    _id: $Section,
    total_sales_count: {$sum : $Sold},
    top_sales: {$max: $Amount},
  }
}

IL _id: $Sezione coppia raggruppa il documento di output in base alle sezioni. Specificando il top_sales_count E Più venduti campi, MongoDB crea nuove chiavi in ​​base all'operazione definita dall'aggregatore; questo può essere $somma , $min , $massimo , O $media .

La fase $skip

Puoi usare il $salta fase per omettere un numero specificato di documenti nell'output. Di solito arriva dopo la fase a gironi. Ad esempio, se si prevedono due documenti di output ma ne si salta uno, l'aggregazione produrrà solo il secondo documento.

Per aggiungere una fase di salto, inserire il file $salta operazione nella pipeline di aggregazione:

 ..., 
{
    $skip: 1
  },

La fase $sort

La fase di ordinamento consente di disporre i dati in ordine decrescente o crescente. Ad esempio, possiamo ordinare ulteriormente i dati nell'esempio di query precedente in ordine decrescente per determinare quale sezione ha le vendite più elevate.

Aggiungi il $ordina operatore alla query precedente:

 ..., 
{
    $sort: {top_sales: -1}
  },

La fase $limit

L'operazione di limite aiuta a ridurre il numero di documenti di output che si desidera vengano visualizzati dalla pipeline di aggregazione. Ad esempio, utilizzare il $limite operatore per ottenere la sezione con le vendite più elevate restituite dalla fase precedente:

 ..., 
{
    $sort: {top_sales: -1}
  },

{"$limit": 1}

Quanto sopra restituisce solo il primo documento; questa è la sezione con le vendite più elevate, poiché appare nella parte superiore dell'output ordinato.

La fase del progetto $

IL $progetto stage ti consente di modellare il documento di output come preferisci. Usando il $progetto operatore, è possibile specificare quale campo includere nell'output e personalizzarne il nome della chiave.

Ad esempio, un output di esempio senza il file $progetto il palco si presenta così:

  Esempio di dati non organizzati per la pipeline di aggregazione

Vediamo come appare con il $progetto palcoscenico. Per aggiungere il $progetto al gasdotto:

 ..., 

{
        "$project": {
            "_id": 0,
            "Section": "$_id",
            "TotalSold": "$total_sales_count",
            "TopSale": "$top_sales",

        }
    }

Poiché in precedenza abbiamo raggruppato i dati in base alle sezioni del prodotto, quanto sopra include ciascuna sezione del prodotto nel documento di output. Garantisce inoltre che il conteggio delle vendite aggregate e le vendite principali siano presenti nell'output come Totale venduto E TopSale .

L'output finale è molto più pulito rispetto al precedente:

  Output di esempio per le fasi della pipeline di aggregazione

La fase di rilassamento

IL $rilassarsi La fase suddivide un array all'interno di un documento in singoli documenti. Prendi quanto segue Ordini dati, ad esempio:

  Dati sugli ordini di esempio

Usa il $rilassarsi fase di decostruire il elementi array prima di applicare altre fasi di aggregazione. Ad esempio, svolgendo il elementi array ha senso se vuoi calcolare le entrate totali per ciascun prodotto:

 db.Orders.aggregate( 
[
  {
    "$unwind": "$items"
  },
  {
    "$group": {
      "_id": "$items.product",
      "total_revenue": { "$sum": { "$multiply": ["$items.quantity", "$items.price"] } }
    }
  },
  {
    "$sort": { "total_revenue": -1 }
  },

  {
        "$project": {
            "_id": 0,
            "Product": "$_id",
            "TotalRevenue": "$total_revenue",

        }
    }
])

Ecco il risultato della query di aggregazione precedente:

  Risultato di esempio per la fase di svolgimento

Come creare una pipeline di aggregazione in MongoDB

Sebbene la pipeline di aggregazione includa diverse operazioni, le fasi descritte in precedenza forniscono un'idea di come applicarle nella pipeline, inclusa la query di base per ciascuna.

Utilizzando il precedente saldi campione di dati, raccogliamo alcune delle fasi discusse in precedenza in un unico pezzo per una visione più ampia della pipeline di aggregazione:

 db.sales.aggregate([ 

    {
        "$match": {
            "Sold": { "$gte": 5 }
            }
    },

        {

        "$group": {
            "_id": "$Section",
            "total_sales_count": { "$sum": "$Sold" },
            "top_sales": { "$max": "$Amount" },
            
        }

    },

    {
        "$sort": { "top_sales": -1 }
    },

    {"$skip": 0},

    {
        "$project": {
            "_id": 0,
            "Section": "$_id",
            "TotalSold": "$total_sales_count",
            "TopSale": "$top_sales",

        }
    }
    
])

L'output finale assomiglia a qualcosa che hai visto in precedenza:

  Output di esempio per le fasi della pipeline di aggregazione

Pipeline di aggregazione e MapReduce

Fino alla sua deprecazione a partire da MongoDB 5.0, il modo convenzionale per aggregare i dati in MongoDB era tramite MapReduce. Sebbene MapReduce ha applicazioni più ampie oltre a MongoDB, è meno efficiente della pipeline di aggregazione, poiché richiede script di terze parti per scrivere la mappa e ridurre le funzioni separatamente.

La pipeline di aggregazione, invece, è specifica solo per MongoDB. Ma fornisce un modo più pulito ed efficiente per eseguire query complesse. Oltre alla semplicità e alla scalabilità delle query, le fasi della pipeline presenti rendono l'output più personalizzabile.

Ce ne sono molti altri differenze tra la pipeline di aggregazione e MapReduce . Li vedrai quando passi da MapReduce alla pipeline di aggregazione.

Rendi efficienti le query sui Big Data in MongoDB

La tua query deve essere il più efficiente possibile se desideri eseguire calcoli approfonditi su dati complessi in MongoDB. La pipeline di aggregazione è ideale per le query avanzate. Invece di manipolare i dati in operazioni separate, cosa che spesso riduce le prestazioni, l'aggregazione consente di raggrupparli tutti in un'unica pipeline performante ed eseguirli una volta.

Sebbene la pipeline di aggregazione sia più efficiente di MapReduce, puoi rendere l'aggregazione più rapida ed efficiente indicizzando i tuoi dati. Ciò limita la quantità di dati che MongoDB deve scansionare durante ogni fase di aggregazione.