Ag­re­ga­vi­mas MongoDB yra vertinga priemonė duomenų bazių analizei ir fil­t­ra­vi­mui. Duomenų srauto sistema leidžia nurodyti užklausas, todėl galima gauti labai in­di­vi­dua­li­zuo­tus re­zul­ta­tus.

Kas yra ag­re­ga­vi­mas MongoDB?

MongoDB yra ne­re­lia­ci­ne ir do­ku­men­tais ori­en­tuo­ta duomenų bazė, sukurta naudoti dideliems ir įvairiems duomenų kiekiams. At­si­sa­ky­da­ma griežtų lentelių ir naudodama tokias tech­no­lo­gi­jas kaip sharding (duomenų sau­go­ji­mas skir­tin­guo­se mazguose), NoSQL spren­di­mas gali būti ho­ri­zon­ta­liai mastelio keičiamas, tuo pačiu išliekant labai lanksčiu ir atspariu gedimams.

Do­ku­men­tai dvejopo JSON formato BSON yra su­gru­puo­ti į rinkinius ir juos galima ieškoti bei redaguoti naudojant MongoDB užklausų kalbą (MQL). Nors ši kalba siūlo daug galimybių, ji nėra tinkama (arba galbūt nėra pa­kan­ka­mai tinkama) duomenų analizei. Todėl MongoDB siūlo ag­re­ga­ci­ją.

Kom­piu­te­rių moksle šis terminas reiškia įvairius procesus. MongoDB ag­re­ga­ci­ja reiškia duomenų analizę ir api­bend­ri­ni­mą naudojant įvairias ope­ra­ci­jas, kad būtų gautas vienas aiškus re­zul­ta­tas. Šio proceso metu vieno ar kelių dokumentų duomenys ana­li­zuo­ja­mi ir fil­t­ruo­ja­mi pagal vartotojo nu­sta­ty­tus veiksnius.

Toliau pa­teik­to­se dalyse ne tik aptariame MongoDB ag­re­ga­vi­mo galimybes išsamiai ana­li­zuo­ti duomenis, bet ir pa­tei­kia­me pavyzdžių, kaip galima naudoti aggregate ( ) metodą su duomenų bazių valdymo sistema.

Ko man reikia MongoDB ag­re­ga­ci­jai?

MongoDB ag­re­ga­ci­jos nau­do­ji­mui taikomi tik keli rei­ka­la­vi­mai. Šis metodas vykdomas apvalkale ir veikia pagal logines taisykles, kurias galite pri­tai­ky­ti savo analizės po­rei­kiams.

Norėdami naudoti ag­re­ga­ci­ją Mongo DB, jūsų kom­piu­te­ry­je turi būti įdiegta MongoDB. Jei jos nėra, mūsų išsamiame MongoDB vadove rasite in­for­ma­ci­ją, kaip at­si­siųs­ti, įdiegti ir paleisti duomenų bazę.

Taip pat tu­rė­tu­mė­te naudoti galingą ug­nia­sie­nę ir įsi­ti­kin­ti, kad jūsų duomenų bazė yra su­kon­fi­gū­ruo­ta pagal visus ga­lio­jan­čius saugumo stan­dar­tus. Norėdami vykdyti ag­re­ga­vi­mą MongoDB, turite turėti ad­mi­nist­ra­to­riaus teises.

Duomenų bazė veikia visose plat­for­mo­se, todėl toliau aprašyti veiksmai taikomi visoms ope­ra­ci­nėms sistemoms.

Kas yra MongoDB ag­re­ga­vi­mo struk­tū­ros vamzdynas?

MongoDB duomenų bazėje galite atlikti paprastus paieškos ar užklausos veiksmus, o duomenų bazė iš karto parodys re­zul­ta­tus. Tačiau šis metodas yra labai ribotas, nes jis gali rodyti tik tuos re­zul­ta­tus, kurie jau yra saugomi do­ku­men­tuo­se. Šio tipo užklausa nėra skirta išsamiai analizei, pa­si­kar­to­jan­tiems modeliams ar pa­pil­do­mos in­for­ma­ci­jos gavimui.

Kartais, norint padaryti reikš­min­gas išvadas, reikia at­si­žvelg­ti į skir­tin­gus duomenų bazės šaltinius. Tokiais atvejais naudojama MongoDB ag­re­ga­ci­ja. Norint pasiekti tokius re­zul­ta­tus, aggregate ( ) metodas naudoja vamzdynus.

Du­jo­t­ie­kio vaidmuo

Ag­re­ga­vi­mo vamzdynai MongoDB yra procesai, kurių metu esami duomenys ana­li­zuo­ja­mi ir fil­t­ruo­ja­mi naudojant įvairius etapus, kad būtų rodomi re­zul­ta­tai, kurių ieško var­to­to­jai. Šie etapai vadinami sta­di­jo­mis. Pri­klau­so­mai nuo rei­ka­la­vi­mų, gali būti ini­ci­juo­ta viena ar kelios stadijos. Jos vykdomos viena po kitos ir keičia jūsų pradinius įvesties duomenis, kad galutinis re­zul­ta­tas (in­for­ma­ci­ja, kurios ieškote) galėtų būti rodomas pabaigoje.

Nors įvestis susideda iš daugybės duomenų, išvestis (t. y. galutinis re­zul­ta­tas) yra vie­nin­te­lis. Šio skirsnio tolesnėje dalyje pa­aiš­kin­si­me skir­tin­gus MongoDB ag­re­ga­vi­mo etapus.

MongoDB ag­re­ga­vi­mo vamzdyno sintaksė

Pir­miau­sia verta trumpai apžvelgti ag­re­ga­vi­mo sintaksę MongoDB. Metodas visada struk­tū­ri­zuo­tas pagal tą patį formatą ir gali būti pri­tai­ky­tas prie jūsų konkrečių rei­ka­la­vi­mų. Pag­rin­di­nė struktūra atrodo taip:

db.collection_name.aggregate ( pipeline, options )
shell

Čia collection_name yra ati­tin­ka­mos ko­lek­ci­jos pa­va­di­ni­mas. MongoDB ag­re­ga­vi­mo etapai yra išvardyti po pipeline. options gali būti nau­do­ja­mas pa­pil­do­miems pa­ra­met­rams, kurie apibrėžia išvestį.

Du­jo­t­ie­kio etapai

MongoDB ag­re­ga­vi­mo vamzdyne yra daug etapų. Daugumą jų galima naudoti keletą kartų viename vamzdyne. Visų galimybių iš­var­di­ji­mas viršytų šio straips­nio apimtį, ypač kadangi kai kurios iš jų rei­ka­lin­gos tik labai spe­ci­fi­niams veiksmams. Tačiau, kad ga­lė­tu­mė­te su­si­da­ry­ti vaizdą apie etapus, čia iš­var­dy­si­me keletą daž­niau­siai naudojamų:

  • $count: Šis etapas parodo, kiek BSON dokumentų buvo ap­svars­ty­ta viename ar keliuose etapuose.
  • $group: Šiame etape do­ku­men­tai rū­šiuo­ja­mi ir gru­puo­ja­mi pagal tam tikrus pa­ra­met­rus.
  • $limit: Apriboja dokumentų, per­duo­da­mų į kitą etapą, skaičių.
  • $match: Naudodami $match etapą, ap­ri­bo­ja­te do­ku­men­tus, kurie naudojami kitame etape.
  • $out: Šis etapas nau­do­ja­mas MongoDB ag­re­ga­vi­mo re­zul­ta­tams įtraukti į kolekciją. Šis etapas gali būti nau­do­ja­mas tik proceso pabaigoje.
  • $project: Naudokite $project, kad at­rink­tu­mė­te konk­re­čius laukus iš ko­lek­ci­jos.
  • $skip: Šiame etape ig­no­ruo­ja­mas tam tikras dokumentų skaičius. Tai galite nurodyti pa­si­rink­da­mi ati­tin­ka­mą parinktį.
  • $sort: Ši operacija rūšiuoja do­ku­men­tus vartotojo ko­lek­ci­jo­je. Tačiau do­ku­men­tai nėra keičiami.
  • $unset: $unset pašalina tam tikrus laukus. Ji atlieka priešingą veiksmą nei $project.

Ag­re­ga­vi­mo pavyzdys MongoDB

Kad ga­lė­tu­mė­te geriau suprasti, kaip veikia ag­re­ga­vi­mas MongoDB, pa­teik­si­me keletą pavyzdžių, iliust­ruo­jan­čių skir­tin­gus etapus ir jų naudojimą. Norėdami naudoti MongoDB ag­re­ga­vi­mą, ati­da­ry­ki­te apvalkalą kaip ad­mi­nist­ra­to­rius. Paprastai pir­miau­sia bus rodomas ban­do­ma­sis duomenų bazės. Jei norite naudoti kitą duomenų bazę, naudokite komandą use.

Šiame pavyzdyje įsi­vaiz­duo­ki­me duomenų bazę, kurioje saugomi duomenys apie klientus, įsi­gi­ju­sius konkretų produktą. Kad būtų pa­pras­čiau, šioje duomenų bazėje yra tik dešimt dokumentų, kurie visi yra vienodos struk­tū­ros:

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

Buvo pateikta ši in­for­ma­ci­ja apie klientus: jų vardas, pavardė, gy­ve­na­mo­ji vieta, šalis ir įsigytų produktų skaičius.

Jei norite išbandyti ag­re­ga­vi­mą MongoDB, galite naudoti metodą insertMany ( ), kad pri­dė­tu­mė­te visus do­ku­men­tus su klientų duo­me­ni­mis į kolekciją pa­va­di­ni­mu „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

Bus rodomas kiekvieno atskiro dokumento objektų ID sąrašas.

Kaip naudoti $match

Norėdami iliust­ruo­ti ag­re­ga­vi­mo galimybes MongoDB, pir­miau­sia pri­tai­ky­si­me $match etapą mūsų „klientų“ ko­lek­ci­jai. Be papildomų parametrų, tai tiesiog pateiktų visą aukščiau išvardytų klientų duomenų sąrašą.

Tačiau šiame pavyzdyje nurodėme, kad būtų rodomi tik klientai iš Italijos. Štai komanda:

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

Dabar bus rodomi tik dviejų klientų iš Italijos objektų ID ir in­for­ma­ci­ja.

Naudokite $sort, kad gautumėte geresnį vaizdą

Jei norite su­tvar­ky­ti savo klientų duomenų bazę, galite naudoti $sort etapą. Toliau pa­teik­ta­me pavyzdyje nurodome sistemai su­rū­šiuo­ti visus klientų duomenis pagal įsigytų vienetų skaičių, pradedant nuo di­džiau­sio skaičiaus. Įvestis atrodo taip:

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

Apriboti išvestį naudojant $project

Naudojant iki šiol naudotus etapus, pa­ma­ty­si­te, kad išvestis yra gana išsami. Pa­vyz­džiui, be faktinės in­for­ma­ci­jos do­ku­men­tuo­se, visada išvedamas ir objekto ID. MongoDB ag­re­ga­vi­mo vamzdyne galite naudoti $project, kad nu­sta­ty­tu­mė­te, kokia in­for­ma­ci­ja turi būti išvedama. Tam rei­ka­lin­giems laukams nustatome vertę 1, o laukams, kurių nereikia įtraukti į išvestį, – vertę 0. Mūsų pavyzdyje norime matyti tik kliento vardą ir pavardę bei įsigytų produktų skaičių. Tam įvedame šią komandą:

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

Sujunkite kelis etapus su ag­re­ga­vi­mu MongoDB

MongoDB ag­re­ga­vi­mas taip pat suteikia galimybę taikyti kelis etapus paeiliui. Jie vykdomi vienas po kito, o ga­liau­siai gaunamas re­zul­ta­tas, kuriame at­si­žvel­gia­ma į visus pa­gei­dau­ja­mus pa­ra­met­rus. Pa­vyz­džiui, jei norite rodyti tik škotų klientų vardus ir pirkimus ma­žė­jan­čia tvarka, galite naudoti aukščiau aprašytus etapus taip:

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

60d998b3c0b60c9c3df84ab9635a326f

5ea2c6aa6c01a3ab74e73bb4a8493f37

4912435f410819dd8f176a25ddca2f57

Go to Main Menu