Kaip analizuoti ir filtruoti duomenų bazes naudojant MongoDB agregaciją
Agregavimas MongoDB yra vertinga priemonė duomenų bazių analizei ir filtravimui. Duomenų srauto sistema leidžia nurodyti užklausas, todėl galima gauti labai individualizuotus rezultatus.
Kas yra agregavimas MongoDB?
MongoDB yra nereliacine ir dokumentais orientuota duomenų bazė, sukurta naudoti dideliems ir įvairiems duomenų kiekiams. Atsisakydama griežtų lentelių ir naudodama tokias technologijas kaip sharding (duomenų saugojimas skirtinguose mazguose), NoSQL sprendimas gali būti horizontaliai mastelio keičiamas, tuo pačiu išliekant labai lanksčiu ir atspariu gedimams.
Dokumentai dvejopo JSON formato BSON yra sugrupuoti į 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 pakankamai tinkama) duomenų analizei. Todėl MongoDB siūlo agregaciją.
Kompiuterių moksle šis terminas reiškia įvairius procesus. MongoDB agregacija reiškia duomenų analizę ir apibendrinimą naudojant įvairias operacijas, kad būtų gautas vienas aiškus rezultatas. Šio proceso metu vieno ar kelių dokumentų duomenys analizuojami ir filtruojami pagal vartotojo nustatytus veiksnius.
Toliau pateiktose dalyse ne tik aptariame MongoDB agregavimo galimybes išsamiai analizuoti duomenis, bet ir pateikiame pavyzdžių, kaip galima naudoti aggregate ( ) metodą su duomenų bazių valdymo sistema.
Ko man reikia MongoDB agregacijai?
MongoDB agregacijos naudojimui taikomi tik keli reikalavimai. Šis metodas vykdomas apvalkale ir veikia pagal logines taisykles, kurias galite pritaikyti savo analizės poreikiams.
Norėdami naudoti agregaciją Mongo DB, jūsų kompiuteryje turi būti įdiegta MongoDB. Jei jos nėra, mūsų išsamiame MongoDB vadove rasite informaciją, kaip atsisiųsti, įdiegti ir paleisti duomenų bazę.
Taip pat turėtumėte naudoti galingą ugniasienę ir įsitikinti, kad jūsų duomenų bazė yra sukonfigūruota pagal visus galiojančius saugumo standartus. Norėdami vykdyti agregavimą MongoDB, turite turėti administratoriaus teises.
Duomenų bazė veikia visose platformose, todėl toliau aprašyti veiksmai taikomi visoms operacinėms sistemoms.
Kas yra MongoDB agregavimo struktūros vamzdynas?
MongoDB duomenų bazėje galite atlikti paprastus paieškos ar užklausos veiksmus, o duomenų bazė iš karto parodys rezultatus. Tačiau šis metodas yra labai ribotas, nes jis gali rodyti tik tuos rezultatus, kurie jau yra saugomi dokumentuose. Šio tipo užklausa nėra skirta išsamiai analizei, pasikartojantiems modeliams ar papildomos informacijos gavimui.
Kartais, norint padaryti reikšmingas išvadas, reikia atsižvelgti į skirtingus duomenų bazės šaltinius. Tokiais atvejais naudojama MongoDB agregacija. Norint pasiekti tokius rezultatus, aggregate ( ) metodas naudoja vamzdynus.
Dujotiekio vaidmuo
Agregavimo vamzdynai MongoDB yra procesai, kurių metu esami duomenys analizuojami ir filtruojami naudojant įvairius etapus, kad būtų rodomi rezultatai, kurių ieško vartotojai. Šie etapai vadinami stadijomis. Priklausomai nuo reikalavimų, gali būti inicijuota viena ar kelios stadijos. Jos vykdomos viena po kitos ir keičia jūsų pradinius įvesties duomenis, kad galutinis rezultatas (informacija, kurios ieškote) galėtų būti rodomas pabaigoje.
Nors įvestis susideda iš daugybės duomenų, išvestis (t. y. galutinis rezultatas) yra vienintelis. Šio skirsnio tolesnėje dalyje paaiškinsime skirtingus MongoDB agregavimo etapus.
MongoDB agregavimo vamzdyno sintaksė
Pirmiausia verta trumpai apžvelgti agregavimo sintaksę MongoDB. Metodas visada struktūrizuotas pagal tą patį formatą ir gali būti pritaikytas prie jūsų konkrečių reikalavimų. Pagrindinė struktūra atrodo taip:
db.collection_name.aggregate ( pipeline, options )shellČia collection_name yra atitinkamos kolekcijos pavadinimas. MongoDB agregavimo etapai yra išvardyti po pipeline. options gali būti naudojamas papildomiems parametrams, kurie apibrėžia išvestį.
Dujotiekio etapai
MongoDB agregavimo vamzdyne yra daug etapų. Daugumą jų galima naudoti keletą kartų viename vamzdyne. Visų galimybių išvardijimas viršytų šio straipsnio apimtį, ypač kadangi kai kurios iš jų reikalingos tik labai specifiniams veiksmams. Tačiau, kad galėtumėte susidaryti vaizdą apie etapus, čia išvardysime keletą dažniausiai naudojamų:
$count: Šis etapas parodo, kiek BSON dokumentų buvo apsvarstyta viename ar keliuose etapuose.$group: Šiame etape dokumentai rūšiuojami ir grupuojami pagal tam tikrus parametrus.$limit: Apriboja dokumentų, perduodamų į kitą etapą, skaičių.$match: Naudodami $match etapą, apribojate dokumentus, kurie naudojami kitame etape.$out: Šis etapas naudojamas MongoDB agregavimo rezultatams įtraukti į kolekciją. Šis etapas gali būti naudojamas tik proceso pabaigoje.$project: Naudokite $project, kad atrinktumėte konkrečius laukus iš kolekcijos.$skip: Šiame etape ignoruojamas tam tikras dokumentų skaičius. Tai galite nurodyti pasirinkdami atitinkamą parinktį.$sort: Ši operacija rūšiuoja dokumentus vartotojo kolekcijoje. Tačiau dokumentai nėra keičiami.$unset: $unset pašalina tam tikrus laukus. Ji atlieka priešingą veiksmą nei $project.
Agregavimo pavyzdys MongoDB
Kad galėtumėte geriau suprasti, kaip veikia agregavimas MongoDB, pateiksime keletą pavyzdžių, iliustruojančių skirtingus etapus ir jų naudojimą. Norėdami naudoti MongoDB agregavimą, atidarykite apvalkalą kaip administratorius. Paprastai pirmiausia bus rodomas bandomasis duomenų bazės. Jei norite naudoti kitą duomenų bazę, naudokite komandą use.
Šiame pavyzdyje įsivaizduokime duomenų bazę, kurioje saugomi duomenys apie klientus, įsigijusius konkretų produktą. Kad būtų paprasčiau, šioje duomenų bazėje yra tik dešimt dokumentų, kurie visi yra vienodos struktūros:
{
"name" : "Smith",
"city" : "Glasgow",
"country" : "Scotland",
"quantity" : 14
}shellBuvo pateikta ši informacija apie klientus: jų vardas, pavardė, gyvenamoji vieta, šalis ir įsigytų produktų skaičius.
Jei norite išbandyti agregavimą MongoDB, galite naudoti metodą insertMany ( ), kad pridėtumėte visus dokumentus su klientų duomenimis į kolekciją pavadinimu „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 }
] )shellBus rodomas kiekvieno atskiro dokumento objektų ID sąrašas.
Kaip naudoti $match
Norėdami iliustruoti agregavimo galimybes MongoDB, pirmiausia pritaikysime $match etapą mūsų „klientų“ kolekcijai. 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" } }
] )shellDabar bus rodomi tik dviejų klientų iš Italijos objektų ID ir informacija.
Naudokite $sort, kad gautumėte geresnį vaizdą
Jei norite sutvarkyti savo klientų duomenų bazę, galite naudoti $sort etapą. Toliau pateiktame pavyzdyje nurodome sistemai surūšiuoti visus klientų duomenis pagal įsigytų vienetų skaičių, pradedant nuo didžiausio skaičiaus. Įvestis atrodo taip:
db.customers.aggregate ( [
{ $sort : { "quantity" : -1 } }
] )shellApriboti išvestį naudojant $project
Naudojant iki šiol naudotus etapus, pamatysite, kad išvestis yra gana išsami. Pavyzdžiui, be faktinės informacijos dokumentuose, visada išvedamas ir objekto ID. MongoDB agregavimo vamzdyne galite naudoti $project, kad nustatytumėte, kokia informacija turi būti išvedama. Tam reikalingiems 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 } }
] )shellSujunkite kelis etapus su agregavimu MongoDB
MongoDB agregavimas taip pat suteikia galimybę taikyti kelis etapus paeiliui. Jie vykdomi vienas po kito, o galiausiai gaunamas rezultatas, kuriame atsižvelgiama į visus pageidaujamus parametrus. Pavyzdž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 } }
] )shell60d998b3c0b60c9c3df84ab9635a326f
5ea2c6aa6c01a3ab74e73bb4a8493f37
4912435f410819dd8f176a25ddca2f57