MongoDB-s on ag­re­gat­sioon väär­tus­lik vahend and­me­baaside ana­lüü­si­miseks ja filt­ree­ri­miseks. Torustiku süsteem võimaldab mää­rat­leda päringuid, mis võimaldab saada väga ko­han­da­tud väl­jun­deid.

Mis on ag­re­gat­sioon MongoDB-s?

MongoDB on mit­te­su­he­line ja do­ku­men­ti­dele orien­tee­ri­tud andmebaas, mis on loodud ka­su­ta­miseks suurte ja mit­me­ke­siste and­me­hul­kade puhul. Loobudes jäikadest ta­be­li­test ja kasutades selliseid tehnikaid nagu sharding (andmete sal­ves­ta­mine eri­ne­va­tesse sõl­me­desse), suudab NoSQL-lahendus ho­ri­son­taal­selt ska­leeruda, jäädes samal ajal väga paind­likuks ja vas­tu­pi­da­vaks riketele.

BSON-vormingus (binary JSON format) do­ku­men­did on koondatud kogudesse ja neid saab otsida ja re­di­gee­rida MongoDB pä­rin­gu­keele (MQL) abil. Kuigi see keel pakub palju võimalusi, ei sobi see andmete ana­lüü­si­miseks (või vähemalt ei sobi piisavalt hästi). Seetõttu pakub MongoDB ag­re­gat­siooni.

Ar­vu­ti­tea­du­ses viitab see termin mit­me­su­gus­tele prot­ses­si­dele. MongoDB-s tähendab ag­re­gat­sioon andmete ana­lüü­si­mist ja kok­ku­võt­mist, kasutades selleks mit­me­su­gu­seid ope­rat­sioone, et saada üks selge tulemus. Selle protsessi käigus ana­lüü­si­takse ja filt­ree­ri­takse ühe või mitme dokumendi andmeid vastavalt kasutaja määratud te­gu­ri­tele.

Järg­mis­tes jaotistes vaatleme mitte ainult MongoDB ag­re­gat­siooni pa­ku­ta­vaid võimalusi põh­ja­likuks andmete ana­lüü­siks, vaid toome ka näiteid selle kohta, kuidas saate aggregate ( ) meetodit and­me­ba­asi hal­dus­süs­tee­mis kasutada.

Mida ma vajan MongoDB ag­re­gat­siooni jaoks?

MongoDB-s ag­re­gat­siooni ka­su­ta­miseks on vaid mõned nõuded. Meetod täi­de­takse shellis ja töötab loo­gi­liste reeglite järgi, mida saab kohandada vastavalt oma analüüsi va­ja­dus­tele.

Mongo DB-s koon­da­mise ka­su­ta­miseks peab MongoDB olema juba teie arvutisse ins­tal­li­tud. Kui see pole veel ins­tal­li­tud, leiate meie põh­ja­li­kust MongoDB-õpetusest teavet selle al­la­laa­di­mise, ins­tal­li­mise ja käi­vi­ta­mise kohta.

Samuti peaksite kasutama võimsat tulemüüri ja veenduma, et teie andmebaas on sea­dis­ta­tud vastavalt kõigile keh­ti­va­tele tur­va­stan­dar­di­tele. MongoDB-s koon­da­mise käi­vi­ta­miseks peate omama ad­mi­nist­raa­to­ri­õi­gusi.

Andmebaas töötab kõigil plat­vormi­del, seega allpool kir­jel­da­tud sammud kehtivad kõikide ope­rat­sioo­ni­süs­teemide puhul.

Mis on MongoDB ag­re­gat­siooni raa­mis­tiku to­ru­juhtme?

MongoDB-s saate teha lihtsaid otsinguid või päringuid, mille tulemused kuvatakse and­me­baasis kohe. See meetod on aga väga piiratud, kuna see suudab kuvada ainult tulemusi, mis on juba sal­ves­ta­tud do­ku­men­ti­des olemas. Sellist tüüpi päringuid ei ole mõeldud põh­ja­likuks ana­lüü­siks, korduvate mustrite leid­miseks ega täiendava teabe saamiseks.

Mõnikord on vaja arvesse võtta and­me­ba­asi erinevaid allikaid, et teha mõ­tes­ta­tud järeldusi. Sellistes olu­kor­da­des ka­su­ta­takse MongoDB ag­re­gat­siooni. Selliste tulemuste saa­vu­ta­miseks kasutab aggregate ( ) meetod to­rus­tikke.

To­ru­juhtme roll

MongoDB-s on koon­da­mis­prot­ses­sid prot­ses­sid, mille käigus ana­lüü­si­takse ja filt­ree­ri­takse ole­mas­ole­vaid andmeid mitme etapi abil, et kuvada ka­su­ta­jate soovitud tulemus. Neid etappe ni­me­ta­takse faasideks. Sõltuvalt nõuetest võib algatada ühe või mitu faasi. Need faasid viiakse läbi üksteise järel ja muudavad algset sisendit nii, et lõpuks saaks kuvada väljundit (otsitavat teavet).

Kuigi sisend koosneb paljudest andmetest, on väljund (st lõpp­tu­le­mus) ühtne. MongoDB ag­re­gat­siooni erinevaid etappe selgitame käesoleva jaotise hilisemas osas.

MongoDB koon­da­mis­prot­sessi süntaks

Esmalt tasub lühidalt tutvuda MongoDB-s ka­su­ta­tava ag­re­gat­siooni sün­tak­siga. Meetod on alati üles ehitatud sama formaadi järgi ja seda saab kohandada vastavalt teie konk­reet­se­tele nõud­mis­tele. Põ­hi­struk­tuur näeb välja järgmine:

db.collection_name.aggregate ( pipeline, options )
shell

Siin on collection_name kõnealuse kogumiku nimi. MongoDB koon­da­mise etapid on loetletud punktis pipeline. options võib kasutada täien­da­vate va­li­ku­liste pa­ra­meet­rite jaoks, mis määravad väljundi.

To­ru­juhtme etapid

MongoDB-s on ag­re­gat­siooni to­ru­juhtme jaoks mitmeid etappe. Enamikku neist saab to­ru­juht­mes mitu korda kasutada. Kõigi või­ma­luste loet­le­mine ületaks käesoleva artikli raamid, eriti kuna mõned neist on vajalikud ainult väga spet­sii­fi­liste toi­min­gute jaoks. Et anda teile et­te­ku­ju­tus etap­pi­dest, loetleme siin mõned kõige sa­ge­da­mini ka­su­ta­ta­vad:

  • $count: See etapp annab teile ülevaate sellest, kui palju BSON-dokumente on ar­ves­ta­tud selle etapi või etappide jaoks töös.
  • $group: Selles etapis sor­tee­ri­takse ja koon­da­takse do­ku­men­did teatud pa­ra­meet­rite alusel.
  • $limit: Piirab järg­misesse etappi edas­ta­ta­vate do­ku­men­tide arvu.
  • $match: $match etapiga piirab dokumente, mida ka­su­ta­takse järgmises etapis.
  • $out: Seda etappi ka­su­ta­takse MongoDB koon­da­mise tulemuste li­sa­miseks kogumisse. Seda etappi saab kasutada ainult protsessi lõpus.
  • $project: Kasutage $project, et valida kogust konk­reet­sed väljad.
  • $skip: Selles etapis ig­no­ree­ri­takse teatud arv dokumente. Seda saab määrata valikuga.
  • $sort: See ope­rat­sioon sorteerib do­ku­men­did kasutaja kogus. Do­ku­men­did ei muutu aga muul viisil.
  • $unset: $unset välistab teatud väljad. See teeb vas­tu­pi­dist sellele, mida teeb $project.

Näide koon­da­mi­sest MongoDB-s

Et aidata teil paremini mõista, kuidas MongoDB-s ag­re­gat­sioon toimib, näitame teile mõned näited eri­ne­va­test etap­pi­dest ja nende ka­su­ta­mi­sest. MongoDB ag­re­gat­siooni ka­su­ta­miseks avage shell ad­mi­nist­raa­tori õigustega. Ta­va­li­selt kuvatakse esmalt tes­tand­me­baas. Kui soovite kasutada teist and­me­ba­asi, kasutage käsku use.

Selle näite puhul kujutame ette and­me­ba­asi, mis sisaldab andmeid klientide kohta, kes on ostnud konk­reetse toote. Lihtsuse huvides on selles and­me­baasis vaid kümme dokumenti, mis on kõik ühesuguse struk­tuuriga:

{
	"name" : "Smith",
	"city" : "Glasgow",
	"country" : "Scotland",
	"quantity" : 14
}
shell

Klientide kohta on lisatud järgmine teave: nende nimi, elukoht, riik ja ostetud toodete arv.

Kui soovite proovida ag­re­gat­siooni MongoDB-s, võite kasutada meetodit insertMany ( ), et lisada kõik klien­di­and­me­tega do­ku­men­did kogumisse nimega „customers”:

db.customers.insertMany ( [
	{ "name" : "Smith", "city" : "Glasgow", "country" : "Scotland", "quantity" : 14 },
	{ "name" : "Meyer", "city" : "Hamburg", "country" : "Germany", "quantity" : 26 },
	{ "name" : "Lee", "city" : "Birmingham", "country" : "England", "quantity" : 5 },
	{ "name" : "Rodriguez", "city" : "Madrid", "country" : "Spain", "quantity" : 19 },
	{ "name" : "Nowak", "city" : "Krakow", "country" : "Poland", "quantity" : 13 },
{ "name" : "Rossi", "city" : "Milano", "country" : "Italy", "quantity" : 10 },
{ "name" : "Arslan", "city" : "Ankara", "country" : "Turkey", "quantity" : 18 },
{ "name" : "Martin", "city" : "Lyon", "country" : "France", "quantity" : 9 },
{ "name" : "Mancini", "city" : "Rome", "country" : "Italy", "quantity" : 21 },
{ "name" : "Schulz", "city" : "Munich", "country" : "Germany", "quantity" : 2 }
] )
shell

Kuvatakse iga dokumendi objektide ID-de loend.

Kuidas kasutada $match

MongoDB-s koon­da­mise või­ma­luste il­lust­ree­ri­miseks rakendame esmalt $match-etappi meie „kliendid” kogumile. Ilma täien­da­vate pa­ra­meet­ri­teta väl­jas­taks see lihtsalt eespool loetletud klientide andmete täieliku nimekirja.

Järgmises näites oleme aga andnud talle juhised näidata ainult Itaalia kliente. Siin on käsk:

db.customers.aggregate ( [
	{ $match : { "country" : "Italy" } }
] )
shell

Nüüd näi­da­takse teile ainult kahe Itaalia kliendi objektide ID-d ja teave.

Kasutage $sort parema ülevaate saamiseks

Kui soovite oma klientide and­me­ba­asi kor­ras­tada, võite kasutada $sort-etappi. Järgmises näites anname süs­tee­mile kor­ral­duse sor­tee­rida kõik klientide andmed ostetud ühikute arvu järgi, alustades suurimast arvust. Sisend näeb välja järgmine:

db.customers.aggregate ( [
	{ $sort : { "quantity" : -1 } }
] )
shell

Piirata väljundit $project abil

Seni kasutatud etappide puhul näete, et väljund on suh­te­li­selt ulatuslik. Näiteks lisaks do­ku­men­ti­des si­sal­du­vale te­ge­li­kule teabele väl­jas­ta­takse alati ka objekti ID. MongoDB koon­da­mis­prot­ses­sis saate kasutada $project, et määrata, milline teave väl­jas­ta­takse. Selleks määrame nõu­ta­va­tele väljadele väärtuse 1 ja väljadele, mida väl­jun­disse lisada ei ole vaja, väärtuse 0. Meie näites soovime näha ainult kliendi nime ja ostetud toodete arvu. Selleks sisestame järgmise:

db.customers.aggregate ( [
	{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
] )
shell

Kom­bi­neeri mitu etappi ag­re­gat­sioo­niga MongoDB-s

MongoDB ag­re­gat­sioon võimaldab teil rakendada ka mitut jär­jes­ti­kust etappi. Need käi­vi­ta­takse üksteise järel ja lõpuks saadakse väljund, mis võtab arvesse kõik soovitud pa­ra­meet­rid. Näiteks, kui soovite kuvada ainult Šoti klientide nimesid ja oste kahanevas jär­je­kor­ras, võite kasutada eespool kir­jel­da­tud etappe järg­mi­selt:

db.customers.aggregate ( [
	{ $match : { "country" : "Scotland" } }
	{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
	{ $sort : { "quantity" : -1 } }
] )
shell

60d998b3c0b60c9c3df84ab9635a326f

5ea2c6aa6c01a3ab74e73bb4a8493f37

Go to Main Menu