Kuinka käyttää yhdistämisputkia MongoDB:ssä

Kuinka käyttää yhdistämisputkia MongoDB:ssä
Kaltaisesi lukijat auttavat tukemaan MUO:ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion. Lue lisää.

Kokoamisputki on suositeltu tapa suorittaa monimutkaisia ​​kyselyitä MongoDB:ssä. Jos olet käyttänyt MongoDB:n MapReducea, sinun on parempi vaihtaa aggregointiputkeen tehostaaksesi laskentaa.





MUO päivän video JATKA SISÄLLÖLLÄ VIERÄTÄ

Mikä on aggregointi MongoDB:ssä ja miten se toimii?

  Yhdistelmäputkiprosessin luonnos

Yhdistelmäputki on monivaiheinen prosessi edistyneen suorittamiseen kyselyt MongoDB:ssä . Se käsittelee tietoja eri vaiheissa, joita kutsutaan liukuhihnaksi. Voit käyttää yhdeltä tasolta luotuja tuloksia toimintamallina toisella.





Voit esimerkiksi siirtää täsmäysoperaation tuloksen toiseen vaiheeseen lajittelua varten, kunnes saat halutun tulosteen.





Aggregointiputkiston jokaisessa vaiheessa on MongoDB-operaattori ja se luo yhden tai useamman muunnetun asiakirjan. Kyselystäsi riippuen taso voi esiintyä käsittelyssä useita kertoja. Saatat joutua käyttämään esimerkiksi $count tai $lajittele operaattorin vaiheet useammin kuin kerran kokoamisputken poikki.

Aggregointiputkilinjan vaiheet

Kokoamisputki kuljettaa tiedot useiden vaiheiden läpi yhdessä kyselyssä. Vaiheita on useita, ja niiden tiedot löydät kohdasta MongoDB-dokumentaatio .



Määritellään alla joitain yleisimmin käytetyistä.

$ottelun vaihe

Tämä vaihe auttaa sinua määrittämään tietyt suodatusehdot ennen muiden yhdistämisvaiheiden aloittamista. Voit käyttää sitä valitsemaan vastaavat tiedot, jotka haluat sisällyttää yhdistämisprosessiin.





$ryhmävaihe

Ryhmävaihe jakaa tiedot eri ryhmiin tiettyjen kriteerien perusteella käyttämällä avainarvopareja. Jokainen ryhmä edustaa avainta tulosteen asiakirjassa.

Harkitse esimerkiksi seuraavaa myynti esimerkkitiedot:





  Esimerkkitiedot esim

Yhdistelmäputken avulla voit laskea kunkin tuoteosion kokonaismyyntimäärän ja suurimman myynnin:

paras ilmainen ftp -asiakas Macille
 { 
$group: {
    _id: $Section,
    total_sales_count: {$sum : $Sold},
    top_sales: {$max: $Amount},
  }
}

The _id: $Section pari ryhmittelee tulosteen osioiden perusteella. Määrittämällä suurin_myynnin_määrä ja top_sales kentät, MongoDB luo uusia avaimia aggregaattorin määrittämän toiminnon perusteella; tämä voi olla $summa , $min , $ max , tai $keskim .

$skip-vaihe

Voit käyttää $ohita vaihe, jos haluat jättää tietyn määrän asiakirjoja tulosteesta. Se tulee yleensä ryhmävaiheen jälkeen. Jos esimerkiksi odotat kahta tulostusasiakirjaa, mutta ohitat yhden, yhdistäminen tulostaa vain toisen asiakirjan.

Lisää ohitusvaihe lisäämällä $ohita toiminta yhdistämisputkiin:

 ..., 
{
    $skip: 1
  },

$sort Stage

Lajitteluvaiheessa voit järjestää tiedot laskevaan tai nousevaan järjestykseen. Voimme esimerkiksi lajitella edellisen kyselyesimerkin tietoja edelleen laskevaan järjestykseen määrittääksemme, mikä osio on myynyt eniten.

Lisää $lajittele operaattori edelliseen kyselyyn:

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

$limit-vaihe

Rajoitustoiminto auttaa vähentämään tulosasiakirjojen määrää, jotka haluat kokoamisliukuhihnan näyttävän. Käytä esimerkiksi $rajoitus operaattori saadakseen edellisen vaiheen palautuneen osion, jonka myynti on suurin:

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

{"$limit": 1}

Yllä oleva palauttaa vain ensimmäisen asiakirjan; tämä on eniten myyty osio, kuten se näkyy lajiteltujen tulosteiden yläosassa.

$projektin vaihe

The $projekti vaiheessa voit muotoilla tulosteen haluamallasi tavalla. Käyttämällä $projekti -operaattorilla, voit määrittää, mikä kenttä tulosteeseen sisällytetään, ja mukauttaa sen avaimen nimeä.

Esimerkiksi näytetuloste ilman $projekti vaihe näyttää tältä:

  Esimerkki järjestämättömistä tiedoista koontiputkistoa varten

Katsotaan miltä se näyttää kanssa $projekti vaiheessa. Voit lisätä $projekti putkeen:

 ..., 

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

        }
    }

Koska olemme aiemmin ryhmitellyt tiedot tuoteosien perusteella, yllä oleva sisältää jokaisen tuoteosion tulosasiakirjassa. Se varmistaa myös, että yhteenlaskettu myyntimäärä ja huippumyynnit näkyvät lähdössä as TotalSold ja TopSale .

Lopputulos on paljon puhtaampi verrattuna edelliseen:

  Näytetulosteet yhdistämisen liukuhihnan vaiheille

$unwind Stage

The $rentoudu vaihe hajottaa asiakirjassa olevan taulukon yksittäisiksi asiakirjoiksi. Ota seuraava Tilaukset dataa, esimerkiksi:

  Esimerkkitilaustiedot

Käytä $rentoudu vaiheessa purkaa kohteita ennen muiden yhdistämisvaiheiden käyttöä. Esimerkiksi purkamalla kohteita matriisi on järkevä, jos haluat laskea kunkin tuotteen kokonaistulot:

 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",

        }
    }
])

Tässä on yllä olevan koontikyselyn tulos:

  Näytetulos rentoutumisvaiheelle

Kuinka luoda aggregointiputki MongoDB:ssä

Vaikka yhdistämisputki sisältää useita toimintoja, aiemmin esitellyt vaiheet antavat sinulle käsityksen siitä, kuinka niitä käytetään liukuhihnassa, mukaan lukien peruskysely jokaiselle.

Käyttämällä edellistä myynti tietonäyte, tarkastellaan joitain yllä käsitellyistä vaiheista yhtenä kappaleena saadaksesi laajemman kuvan aggregointiputkistosta:

 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",

        }
    }
    
])

Lopullinen tulos näyttää siltä, ​​mitä olet nähnyt aiemmin:

  Näytetulosteet yhdistämisen liukuhihnan vaiheille

Aggregation Pipeline vs. MapReduce

MongoDB 5.0:sta alkaen sen poistumiseen asti tavanomainen tapa koota tietoja MongoDB:ssä oli MapReduce. Siitä huolimatta MapReducella on laajempia sovelluksia MongoDB:n lisäksi se on vähemmän tehokas kuin aggregointiputki, ja se vaatii kolmannen osapuolen komentosarjat kartan kirjoittamiseen ja toimintojen vähentämiseen erikseen.

Yhdistelmäputki puolestaan ​​​​on vain MongoDB: lle. Mutta se tarjoaa puhtaamman ja tehokkaamman tavan suorittaa monimutkaisia ​​kyselyjä. Yksinkertaisuuden ja kyselyn skaalautuvuuden lisäksi esitellyt liukuhihnavaiheet tekevät tuotosta paremmin muokattavissa.

On monia muitakin erot yhdistämisputkien ja MapReducen välillä . Näet ne, kun siirryt MapReduce-sovelluksesta yhdistämisprosessiin.

Tee Big Data -kyselyistä tehokkaita MongoDB:ssä

Kyselysi on oltava mahdollisimman tehokas, jos haluat suorittaa perusteellisia laskelmia monimutkaisista tiedoista MongoDB:ssä. Aggregointiputkisto on ihanteellinen edistyneeseen kyselyyn. Sen sijaan, että käsittelet tietoja erillisissä toiminnoissa, mikä usein heikentää suorituskykyä, yhdistämisen avulla voit pakata ne kaikki yhteen suoritusputkeen ja suorittaa ne kerran.

Vaikka kokoamisputki on tehokkaampi kuin MapReduce, voit tehdä yhdistämisestä nopeampaa ja tehokkaampaa indeksoimalla tietosi. Tämä rajoittaa MongoDB:n skannattavan tiedon määrää kunkin yhdistämisvaiheen aikana.