Agre­ga­ci­ja v MongoDB je dragoceno orodje za analizo in fil­tri­ra­nje po­dat­kov­nih baz. Sistem cevovodov omogoča določanje poizvedb, kar omogoča visoko pri­la­go­je­ne izhodne podatke.

Kaj je agre­ga­ci­ja v MongoDB?

MongoDB je ne­re­la­cij­ska in do­ku­men­tno usmerjena baza podatkov, ki je zasnovana za uporabo z velikimi in ra­zno­li­ki­mi ko­li­či­na­mi podatkov. Z opu­sti­tvi­jo togih tabel in uporabo tehnik, kot je sharding (shra­nje­va­nje podatkov na različnih vozliščih), se rešitev NoSQL lahko ho­ri­zon­tal­no širi, hkrati pa ostaja zelo pri­la­go­dlji­va in odporna na napake.

Dokumenti v binarnem formatu JSON BSON so združeni v zbirke in jih je mogoče po­i­zve­do­va­ti in urejati z jezikom MongoDB Query Language (MQL). Čeprav ta jezik ponuja veliko možnosti, ni primeren (ali morda ni dovolj primeren) za analizo podatkov. Zato MongoDB omogoča agre­ga­ci­jo.

V ra­ču­nal­ni­štvu se ta izraz nanaša na različne procese. V MongoDB se agre­ga­ci­ja nanaša na analizo in pov­ze­ma­nje podatkov z uporabo različnih operacij, da se pridobi enoten in jasen rezultat. Med tem procesom se podatki iz enega ali več do­ku­men­tov ana­li­zi­ra­jo in fil­tri­ra­jo v skladu z upo­rab­ni­ško do­lo­če­ni­mi dejavniki.

V na­sle­dnjih poglavjih ne bomo obrav­na­va­li le možnosti, ki jih agre­ga­ci­ja MongoDB ponuja za celovito analizo podatkov, ampak bomo podali tudi primere, kako lahko metodo aggregate ( ) uporabite v sistemu za upra­vlja­nje po­dat­kov­nih baz.

Kaj po­tre­bu­jem za agre­ga­ci­jo MongoDB?

Za uporabo agre­ga­ci­je v MongoDB je potrebnih le nekaj pogojev. Metoda se izvaja v lupini in deluje v skladu z logičnimi pravili, ki jih lahko pri­la­go­di­te potrebam svoje analize.

Da bi lahko upo­ra­blja­li agre­ga­ci­jo v Mongo DB, morate imeti MongoDB že nameščen na svojem ra­ču­nal­ni­ku. Če ga še nimate, lahko v našem izčrpnem MongoDB vodiču izveste, kako prenesti, namestiti in zagnati bazo podatkov.

Uporabite tudi zmogljiv požarni zid in poskrbite, da je vaša baza podatkov na­sta­vlje­na v skladu z vsemi ve­ljav­ni­mi var­no­stni­mi standardi. Za izvajanje agre­ga­ci­je v MongoDB po­tre­bu­je­te ad­mi­ni­stra­tiv­ne pravice.

Baza podatkov deluje na vseh plat­for­mah, zato spodaj opisani koraki veljajo za vse ope­ra­cij­ske sisteme.

Kaj je cevovod v agre­ga­cij­skem okviru MongoDB?

V MongoDB lahko izvajate preprosta iskanja ali poizvedbe, pri čemer baza podatkov takoj prikaže rezultate. Vendar je ta metoda zelo omejena, saj lahko prikaže le rezultate, ki že obstajajo v shra­nje­nih do­ku­men­tih. Ta vrsta poizvedbe ni namenjena po­glo­blje­ni analizi, po­na­vlja­jo­čim se vzorcem ali pri­do­bi­va­nju dodatnih in­for­ma­cij.

Včasih je treba upo­šte­va­ti različne vire znotraj baze podatkov, da se lahko pride do smiselnih za­ključ­kov. V takih primerih se uporablja agre­ga­ci­ja MongoDB. Za doseganje takih re­zul­ta­tov metoda aggregate ( ) uporablja cevovode.

Vloga plinovoda

Agre­ga­cij­ske poti v MongoDB so procesi, v katerih se obstoječi podatki ana­li­zi­ra­jo in fil­tri­ra­jo s pomočjo različnih korakov, da se prikaže rezultat, ki ga upo­rab­ni­ki iščejo. Ti koraki se imenujejo stopnje. Glede na zahteve se lahko sproži ena ali več stopenj. Te se izvajajo ena za drugo in spre­me­ni­jo vaš izvirni vnos, tako da se na koncu prikaže izhod (in­for­ma­ci­je, ki jih iščete).

Medtem ko je vhod se­sta­vljen iz številnih podatkov, je izhod (tj. končni rezultat) enoten. Različne stopnje agre­ga­ci­je MongoDB bomo pojasnili kasneje v tem poglavju.

Sintaksa agre­ga­cij­ske cevi MongoDB

Najprej je vredno na kratko pogledati sintakso agre­ga­ci­je v MongoDB. Metoda je vedno struk­tu­ri­ra­na v skladu z istim formatom in jo je mogoče pri­la­go­di­ti vašim spe­ci­fič­nim zahtevam. Osnovna struktura je naslednja:

db.collection_name.aggregate ( pipeline, options )
shell

Tukaj je collection_name ime zbirke, o kateri govorimo. Stopnje agre­ga­ci­je MongoDB so navedene pod pipeline. options se lahko uporabi za dodatne izbirne parametre, ki določajo izhod.

Stopnje izgradnje plinovoda

V MongoDB obstaja več stopenj za agre­ga­cij­ski cevovod. Večina jih je mogoče večkrat uporabiti znotraj cevovoda. Navajanje vseh možnosti bi preseglo obseg tega članka, še posebej ker so nekatere potrebne le za zelo spe­ci­fič­ne operacije. Da bi vam ponudili pregled stopenj, bomo navedli nekaj naj­po­go­ste­je upo­ra­blje­nih:

  • $count: Ta faza vam daje in­for­ma­ci­jo o tem, koliko do­ku­men­tov BSON je bilo upo­šte­va­nih za fazo ali faze v poteku.
  • $group: Ta faza razvršča in združuje dokumente v skladu z do­lo­če­ni­mi parametri.
  • $limit: Omeji število do­ku­men­tov, ki se prenesejo v naslednjo fazo v poteku.
  • $match: S stopnjo $match omejite dokumente, ki se uporabijo za naslednjo stopnjo.
  • $out: Ta faza se uporablja za vklju­či­tev re­zul­ta­tov agre­ga­ci­je MongoDB v zbirko. Ta faza se lahko uporablja samo na koncu poteka.
  • $project: Uporabite $project, da izberete določena polja iz zbirke.
  • $skip: Ta faza ignorira določeno število do­ku­men­tov. To lahko določite z možnostjo.
  • $sort: Ta operacija razvrsti dokumente v zbirki upo­rab­ni­ka. Vendar se dokumenti poleg tega ne spre­me­ni­jo.
  • $unset: $unset izključi določena polja. Deluje nasprotno od $project.

Primer agre­ga­ci­je v MongoDB

Da bi vam pomagali bolje razumeti, kako deluje agre­ga­ci­ja v MongoDB, vam bomo pokazali nekaj primerov različnih stopenj in kako jih upo­ra­blja­ti. Za uporabo agre­ga­ci­je MongoDB odprite lupino kot skrbnik. Običajno se najprej prikaže testna baza podatkov. Če želite uporabiti drugo bazo podatkov, uporabite ukaz use.

V tem primeru si pred­sta­vljaj­mo bazo podatkov, ki vsebuje podatke o strankah, ki so kupile določen izdelek. Da bo stvar preprosta, ima ta baza podatkov le deset do­ku­men­tov, ki so vsi enako struk­tu­ri­ra­ni:

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

Vključene so naslednje in­for­ma­ci­je o strankah: njihovo ime, kraj bivanja, država in število kupljenih izdelkov.

Če želite poskusiti agre­ga­ci­jo v MongoDB, lahko uporabite metodo insertMany ( ), da dodate vse dokumente s podatki o strankah v zbirko z imenom »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

Prikazan bo seznam iden­ti­fi­ka­cij­skih številk objektov za vsak posamezni dokument.

Kako upo­ra­blja­ti $match

Da bi po­na­zo­ri­li možnosti agre­ga­ci­je v MongoDB, bomo najprej uporabili stopnjo $match za našo zbirko »stranke«. Brez dodatnih pa­ra­me­trov bi to preprosto izpisalo celoten seznam podatkov o strankah, navedenih zgoraj.

V na­sle­dnjem primeru pa smo mu naročili, naj nam prikaže samo stranke iz Italije. Tukaj je ukaz:

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

Sedaj se vam bodo prikazali samo ID-ji objektov in podatki o dveh strankah iz Italije.

Uporabite $sort za boljši pregled

Če želite or­ga­ni­zi­ra­ti svojo bazo podatkov strank, lahko uporabite stopnjo $sort. V na­sle­dnjem primeru sistemu naročimo, naj vse podatke o strankah razvrsti glede na število kupljenih enot, začenši z najvišjim številom. Vnos je videti takole:

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

Omejite izhod z $project

Z doslej upo­ra­blje­ni­mi stopnjami boste videli, da je izhod relativno obsežen. Poleg dejanskih in­for­ma­cij v do­ku­men­tih se na primer vedno izpiše tudi ID objekta. V agre­ga­cij­ski cevi MongoDB lahko uporabite $project, da določite, katere in­for­ma­ci­je naj se izpišejo. Za to nastavimo vrednost 1 za obvezna polja in 0 za polja, ki jih ni treba vključiti v izhod. V našem primeru želimo videti samo ime stranke in število kupljenih izdelkov. Za to vnesemo naslednje:

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

Združite več stopenj z agre­ga­ci­jo v MongoDB

Agre­ga­ci­ja MongoDB vam omogoča tudi uporabo več za­po­re­dnih stopenj. Te se nato izvajajo ena za drugo, na koncu pa dobite izhod, ki upošteva vse želene parametre. Če na primer želite prikazati samo imena in nakupe škotskih strank v padajočem vrstnem redu, lahko uporabite zgoraj opisane stopnje na naslednji način:

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

60d998b3c0b60c9c3df84ab9635a326f

5ea2c6aa6c01a3ab74e73bb4a8493f37

4912435f410819dd8f176a25ddca2f57

b6e4bbb337f54db7fc3b8fcae4fbadb9

Go to Main Menu