Kuidas MongoDB-s koondamistoru kasutada

Kuidas MongoDB-s koondamistoru kasutada
Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu. Loe rohkem.

Koondamiskonveier on soovitatav viis keeruliste päringute käitamiseks MongoDB-s. Kui olete kasutanud MongoDB'i MapReduce'i, lülituge tõhusamate arvutuste tegemiseks paremini koondamiskonveierile.





MUO päeva video SISUGA JÄTKAMISEKS KERIMISE

Mis on MongoDB koondamine ja kuidas see toimib?

  Koondamiskonveieri protsessi eskiis

Koondamiskonveier on mitmeetapiline protsess täiustatud käitamiseks päringud MongoDB-s . See töötleb andmeid erinevate etappide kaudu, mida nimetatakse torujuhtmeks. Ühelt tasemelt loodud tulemusi saate kasutada operatsioonimallina teisel tasemel.





Näiteks saate edastada vasteoperatsiooni tulemuse teisele etapile sorteerimiseks selles järjekorras, kuni saate soovitud väljundi.





Koondamiskonveieri igas etapis on MongoDB operaator ja see genereerib ühe või mitu teisendatud dokumenti. Olenevalt teie päringust võib tase kuvada konveier mitu korda. Näiteks peate võib-olla kasutama $count või $sorteeri operaatori etappe üle koondamiskonveieri rohkem kui üks kord.

Koondamistorustiku etapid

Koondamiskonveier läbib andmeid ühes päringus mitme etapi kaudu. Seal on mitu etappi ja nende üksikasjad leiate jaotisest MongoDB dokumentatsioon .



Määratleme allpool mõned kõige sagedamini kasutatavad.

$matši etapp

See etapp aitab teil enne teiste koondamisetappide alustamist määratleda konkreetsed filtreerimistingimused. Saate seda kasutada vastavate andmete valimiseks, mida soovite koondamiskonveierisse kaasata.





$grupi etapp

Rühmaetapp jaotab andmed võtme-väärtuste paaride alusel konkreetsete kriteeriumide alusel erinevatesse rühmadesse. Iga rühm tähistab väljunddokumendi võtit.

Näiteks kaaluge järgmist müük näidisandmed:





  Näidisandmed näiteks

Koondamiskonveieri abil saate arvutada iga tootejaotise müügi koguarvu ja suurima müügimahu.

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

The _id: $Sektsioon paar rühmitab väljunddokumendi jaotiste alusel. Määrates top_sales_count ja top_sales väljad, loob MongoDB koondaja määratletud toimingu põhjal värsked võtmed; see võib olla $summa , $min , $max , või $keskm .

$vahelejätmise etapp

Võite kasutada $ vahele etapis, et väljundis teatud arv dokumente välja jätta. Tavaliselt tuleb see pärast rühmaetappi. Näiteks kui ootate kahte väljunddokumenti, kuid jätate ühe vahele, väljastab liitmine ainult teise dokumendi.

Vahelejätmisetapi lisamiseks sisestage $ vahele toimimine koondamiskonveierisse:

 ..., 
{
    $skip: 1
  },

$sortimise etapp

Sorteerimisetapis saate järjestada andmeid kahanevas või kasvavas järjekorras. Näiteks saame eelmises päringunäites olevaid andmeid veelgi sorteerida kahanevas järjekorras, et teha kindlaks, millises jaotises on kõige suurem müük.

Lisage $sorteeri operaator eelmisele päringule:

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

$limit etapp

Limiittoiming aitab vähendada väljunddokumentide arvu, mida soovite koondamiskonveieril kuvada. Näiteks kasutage $limit operaator, et saada eelmise etapi suurima müügiga jaotis:

mida tähendab emotikon tekstisõnumite saatmisel
 ..., 
{
    $sort: {top_sales: -1}
  },

{"$limit": 1}

Ülaltoodu tagastab ainult esimese dokumendi; see on kõige suurema müügiga jaotis, nagu see kuvatakse sorteeritud väljundi ülaosas.

$projekti etapp

The $projekt staadium võimaldab väljunddokumendi kujundada vastavalt oma soovile. Kasutades $projekt operaator, saate määrata, milline väli väljundisse kaasata, ja kohandada selle võtme nime.

Näiteks näidisväljund ilma $projekt etapp näeb välja selline:

  Koondamiskonveieri korrastamata andmete näidis

Vaatame, kuidas see välja näeb koos $projekt etapp. Et lisada $projekt torujuhtmele:

 ..., 

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

        }
    }

Kuna oleme varem andmed tootejaotiste alusel rühmitanud, hõlmab ülaltoodu iga tootejaotis väljunddokumendis. Samuti tagab see, et väljundis on koondmüügiloendus ja suurim müük Kokku müüdud ja TopSale .

Lõppväljund on eelmisega võrreldes palju puhtam:

  Koondamiskonveieri etappide näidisväljund

$lõdvestumislava

The $lõdvestu etapp jagab dokumendis oleva massiivi üksikuteks dokumentideks. Võtke järgmine Tellimused andmed, näiteks:

  Näidistellimuste andmed

Kasuta $lõdvestu etapi dekonstrueerimiseks esemed massiivi enne muude liitmisetappide rakendamist. Näiteks lahti kerides esemed massiiv on mõttekas, kui soovite arvutada iga toote kogutulu:

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

        }
    }
])

Siin on ülaltoodud koondamispäringu tulemus:

  Lõdvestusetapi näidistulemus

Kuidas luua MongoDB-s koondamistoru

Kuigi koondamiskonveier sisaldab mitut toimingut, annavad varem esiletoodud etapid teile aimu, kuidas neid konveieril rakendada, sealhulgas iga põhipäring.

Kasutades eelmist müük Andmenäidis, koondame koondamiskonveieri laiema ülevaate saamiseks mõned ülaltoodud etapid:

 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õplik väljund näeb välja nagu midagi, mida olete varem näinud:

  Koondamiskonveieri etappide näidisväljund

Koondamistoru vs. MapReduce

Kuni selle aegumiseni alates MongoDB 5.0-st oli tavaline viis andmete koondamiseks MongoDB-s MapReduce'i kaudu. Kuigi MapReduce'il on laiemad rakendused peale MongoDB on see vähem tõhus kui koondamiskonveier, mistõttu on kaardi kirjutamiseks ja funktsioonide eraldi vähendamiseks vaja kolmanda osapoole skripte.

Seevastu koondamiskonveier on spetsiifiline ainult MongoDB jaoks. Kuid see on puhtam ja tõhusam viis keeruliste päringute täitmiseks. Lisaks lihtsusele ja päringu skaleeritavusele muudavad esiletõstetud konveieri etapid väljundi paremini kohandatavaks.

Neid on palju rohkem erinevused koondamiskonveieri ja MapReduce'i vahel . Näete neid, kui lülitute MapReduce'ilt koondamiskonveierile.

Muutke suurandmepäringud MongoDB-s tõhusaks

Teie päring peab olema võimalikult tõhus, kui soovite MongoDB-s keeruliste andmete põhjal teha põhjalikke arvutusi. Koondamiskonveier on ideaalne täpsemate päringute jaoks. Selle asemel, et töödelda andmeid eraldi toimingute käigus, mis sageli vähendab jõudlust, võimaldab koondamine teil need kõik ühte toimivuskonveierisse pakkida ja üks kord käivitada.

Kuigi koondamiskonveier on tõhusam kui MapReduce, saate andmete indekseerimisega koondamise kiiremaks ja tõhusamaks muuta. See piirab andmete hulka, mida MongoDB peab igas koondamisetapis skannima.