Kako analizirati in filtrirati podatkovne baze z agregacijo MongoDB
Agregacija v MongoDB je dragoceno orodje za analizo in filtriranje podatkovnih baz. Sistem cevovodov omogoča določanje poizvedb, kar omogoča visoko prilagojene izhodne podatke.
Kaj je agregacija v MongoDB?
MongoDB je nerelacijska in dokumentno usmerjena baza podatkov, ki je zasnovana za uporabo z velikimi in raznolikimi količinami podatkov. Z opustitvijo togih tabel in uporabo tehnik, kot je sharding (shranjevanje podatkov na različnih vozliščih), se rešitev NoSQL lahko horizontalno širi, hkrati pa ostaja zelo prilagodljiva in odporna na napake.
Dokumenti v binarnem formatu JSON BSON so združeni v zbirke in jih je mogoče poizvedovati 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 agregacijo.
V računalništvu se ta izraz nanaša na različne procese. V MongoDB se agregacija nanaša na analizo in povzemanje podatkov z uporabo različnih operacij, da se pridobi enoten in jasen rezultat. Med tem procesom se podatki iz enega ali več dokumentov analizirajo in filtrirajo v skladu z uporabniško določenimi dejavniki.
V naslednjih poglavjih ne bomo obravnavali le možnosti, ki jih agregacija MongoDB ponuja za celovito analizo podatkov, ampak bomo podali tudi primere, kako lahko metodo aggregate ( ) uporabite v sistemu za upravljanje podatkovnih baz.
Kaj potrebujem za agregacijo MongoDB?
Za uporabo agregacije v MongoDB je potrebnih le nekaj pogojev. Metoda se izvaja v lupini in deluje v skladu z logičnimi pravili, ki jih lahko prilagodite potrebam svoje analize.
Da bi lahko uporabljali agregacijo v Mongo DB, morate imeti MongoDB že nameščen na svojem računalniku. Č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 nastavljena v skladu z vsemi veljavnimi varnostnimi standardi. Za izvajanje agregacije v MongoDB potrebujete administrativne pravice.
Baza podatkov deluje na vseh platformah, zato spodaj opisani koraki veljajo za vse operacijske sisteme.
Kaj je cevovod v agregacijskem 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 shranjenih dokumentih. Ta vrsta poizvedbe ni namenjena poglobljeni analizi, ponavljajočim se vzorcem ali pridobivanju dodatnih informacij.
Včasih je treba upoštevati različne vire znotraj baze podatkov, da se lahko pride do smiselnih zaključkov. V takih primerih se uporablja agregacija MongoDB. Za doseganje takih rezultatov metoda aggregate ( ) uporablja cevovode.
Vloga plinovoda
Agregacijske poti v MongoDB so procesi, v katerih se obstoječi podatki analizirajo in filtrirajo s pomočjo različnih korakov, da se prikaže rezultat, ki ga uporabniki 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 spremenijo vaš izvirni vnos, tako da se na koncu prikaže izhod (informacije, ki jih iščete).
Medtem ko je vhod sestavljen iz številnih podatkov, je izhod (tj. končni rezultat) enoten. Različne stopnje agregacije MongoDB bomo pojasnili kasneje v tem poglavju.
Sintaksa agregacijske cevi MongoDB
Najprej je vredno na kratko pogledati sintakso agregacije v MongoDB. Metoda je vedno strukturirana v skladu z istim formatom in jo je mogoče prilagoditi vašim specifičnim zahtevam. Osnovna struktura je naslednja:
db.collection_name.aggregate ( pipeline, options )shellTukaj je collection_name ime zbirke, o kateri govorimo. Stopnje agregacije 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 agregacijski 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 specifične operacije. Da bi vam ponudili pregled stopenj, bomo navedli nekaj najpogosteje uporabljenih:
$count: Ta faza vam daje informacijo o tem, koliko dokumentov BSON je bilo upoštevanih za fazo ali faze v poteku.$group: Ta faza razvršča in združuje dokumente v skladu z določenimi parametri.$limit: Omeji število dokumentov, 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čitev rezultatov agregacije 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 dokumentov. To lahko določite z možnostjo.$sort: Ta operacija razvrsti dokumente v zbirki uporabnika. Vendar se dokumenti poleg tega ne spremenijo.$unset: $unset izključi določena polja. Deluje nasprotno od $project.
Primer agregacije v MongoDB
Da bi vam pomagali bolje razumeti, kako deluje agregacija v MongoDB, vam bomo pokazali nekaj primerov različnih stopenj in kako jih uporabljati. Za uporabo agregacije 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 predstavljajmo bazo podatkov, ki vsebuje podatke o strankah, ki so kupile določen izdelek. Da bo stvar preprosta, ima ta baza podatkov le deset dokumentov, ki so vsi enako strukturirani:
{
"name" : "Smith",
"city" : "Glasgow",
"country" : "Scotland",
"quantity" : 14
}shellVključene so naslednje informacije o strankah: njihovo ime, kraj bivanja, država in število kupljenih izdelkov.
Če želite poskusiti agregacijo 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 }
] )shellPrikazan bo seznam identifikacijskih številk objektov za vsak posamezni dokument.
Kako uporabljati $match
Da bi ponazorili možnosti agregacije v MongoDB, bomo najprej uporabili stopnjo $match za našo zbirko »stranke«. Brez dodatnih parametrov bi to preprosto izpisalo celoten seznam podatkov o strankah, navedenih zgoraj.
V naslednjem primeru pa smo mu naročili, naj nam prikaže samo stranke iz Italije. Tukaj je ukaz:
db.customers.aggregate ( [
{ $match : { "country" : "Italy" } }
] )shellSedaj se vam bodo prikazali samo ID-ji objektov in podatki o dveh strankah iz Italije.
Uporabite $sort za boljši pregled
Če želite organizirati svojo bazo podatkov strank, lahko uporabite stopnjo $sort. V naslednjem 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 } }
] )shellOmejite izhod z $project
Z doslej uporabljenimi stopnjami boste videli, da je izhod relativno obsežen. Poleg dejanskih informacij v dokumentih se na primer vedno izpiše tudi ID objekta. V agregacijski cevi MongoDB lahko uporabite $project, da določite, katere informacije 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 } }
] )shellZdružite več stopenj z agregacijo v MongoDB
Agregacija MongoDB vam omogoča tudi uporabo več zaporednih 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 } }
] )shell60d998b3c0b60c9c3df84ab9635a326f
5ea2c6aa6c01a3ab74e73bb4a8493f37
4912435f410819dd8f176a25ddca2f57
b6e4bbb337f54db7fc3b8fcae4fbadb9