Kā analizēt un filtrēt datu bāzes ar MongoDB agregāciju
Agregācija MongoDB ir vērtīgs rīks datu bāzu analīzei un filtrēšanai. Pieslēguma sistēma ļauj norādīt vaicājumus, nodrošinot ļoti individualizētus rezultātus.
Kas ir agregācija MongoDB?
MongoDB ir nesaistīta un dokumentu orientēta datu bāze, kas ir paredzēta lietošanai ar lieliem un daudzveidīgiem datu apjomiem. Atkāpjoties no stingrām tabulām un izmantojot tādus paņēmienus kā sadalīšana (datu glabāšana dažādos mezglos), NoSQL risinājums var tikt horizontāli mērogs, vienlaikus saglabājot augstu elastību un izturību pret kļūmēm.
Dokumenti binārā JSON formātā BSON ir apkopoti kolekcijās, un tos var meklēt un rediģēt, izmantojot MongoDB vaicājumu valodu (MQL). Lai gan šī valoda piedāvā daudzas iespējas, tā nav piemērota (vai varbūt nav pietiekami piemērota) datu analīzei. Tāpēc MongoDB nodrošina agregāciju.
Datorzinātnē šis termins attiecas uz dažādiem procesiem. MongoDB agregācija attiecas uz datu analīzi un apkopojumu, izmantojot dažādas operācijas, lai iegūtu vienotu un skaidru rezultātu. Šī procesa laikā dati no viena vai vairākiem dokumentiem tiek analizēti un filtrēti atbilstoši lietotāja definētiem faktoriem.
Turpmākajās sadaļās mēs ne tikai apskatīsim iespējas, ko MongoDB agregācija piedāvā visaptverošai datu analīzei, bet arī sniegsim piemērus, kā var izmantot aggregate ( ) metodi ar datu bāzes pārvaldības sistēmu.
Kas man nepieciešams MongoDB agregācijai?
MongoDB agregācijas izmantošanai ir tikai daži nosacījumi. Metode tiek izpildīta čaulā un darbojas saskaņā ar loģiskiem noteikumiem, kurus var pielāgot savas analīzes vajadzībām.
Lai izmantotu agregāciju Mongo DB, jūsu datorā jau jābūt instalētai MongoDB. Ja tā nav, mūsu visaptverošajā MongoDB apmācībā varat uzzināt, kā lejupielādēt, instalēt un palaist datu bāzi.
Jums arī jāizmanto jaudīga ugunsmūra un jāpārliecinās, ka jūsu datu bāze ir konfigurēta atbilstoši visiem pašreizējiem drošības standartiem. Lai veiktu apkopojumu MongoDB, jums ir nepieciešamas administratora tiesības.
Datu bāze darbojas visās platformās, tādēļ zemāk aprakstītie soļi attiecas uz visām operētājsistēmām.
Kas ir cauruļvads MongoDB agregācijas sistēmā?
MongoDB datu bāzē var veikt vienkāršas meklēšanas vai vaicājumus, un datu bāze uzreiz parāda rezultātus. Tomēr šī metode ir ļoti ierobežota, jo tā var parādīt tikai rezultātus, kas jau ir saglabāti dokumentos. Šāda veida vaicājumi nav paredzēti padziļinātai analīzei, atkārtojošos modeļu meklēšanai vai papildu informācijas iegūšanai.
Dažreiz, lai izdarītu nozīmīgus secinājumus, ir jāņem vērā dažādi avoti datu bāzē. Šādos gadījumos tiek izmantota MongoDB agregācija. Lai sasniegtu šādus rezultātus, aggregate ( ) metode izmanto cauruļvadus.
Cauruļvada nozīme
Apkopošanas cauruļvadi MongoDB ir procesi, kuros esošie dati tiek analizēti un filtrēti, izmantojot dažādus posmus, lai parādītu rezultātu, ko meklē lietotāji. Šos posmus sauc par stadijām. Atkarībā no prasībām var tikt uzsāktas viena vai vairākas stadijas. Tās tiek izpildītas viena pēc otras un maina jūsu sākotnējo ievadi, lai beigās varētu parādīt izvadi (informāciju, ko jūs meklējat).
Lai gan ievade sastāv no daudziem datiem, izvade (t. i., galarezultāts) ir vienota. Šīs sadaļas turpinājumā izskaidrosim dažādus MongoDB agregācijas posmus.
MongoDB agregācijas cauruļvada sintakse
Vispirms ir vērts īsumā apskatīt agregācijas sintaksi MongoDB. Metode vienmēr ir strukturēta atbilstoši vienam un tam pašam formātam un var tikt pielāgota jūsu konkrētajām prasībām. Pamata struktūra izskatās šādi:
db.collection_name.aggregate ( pipeline, options )shellŠeit collection_name ir attiecīgās kolekcijas nosaukums. MongoDB agregācijas posmi ir uzskaitīti zem pipeline. options var izmantot papildu opcionāliem parametriem, kas definē izvadi.
Cauruļvadu posmi
MongoDB agregācijas cauruļvadā ir daudz posmu. Lielākā daļa no tiem var tikt izmantoti vairākas reizes cauruļvadā. Šajā rakstā nav iespējams uzskaitīt visas iespējas, jo dažas no tām ir nepieciešamas tikai ļoti specifiskām darbībām. Tomēr, lai sniegtu priekšstatu par posmiem, šeit uzskaitīsim dažus no visbiežāk izmantotajiem:
$count: Šis posms sniedz norādi par to, cik daudz BSON dokumentu ir ņemti vērā šajā posmā vai posmos procesā.$group: Šajā posmā dokumenti tiek šķiroti un grupēti atbilstoši noteiktiem parametriem.$limit: Ierobežo dokumentu skaitu, kas tiek nodots nākamajam posmam procesā.$match: Ar posmu $match jūs ierobežojat dokumentus, kas tiek izmantoti nākamajā posmā.$out: Šis posms tiek izmantots, lai iekļautu MongoDB apkopojuma rezultātus kolekcijā. Šo posmu var izmantot tikai procesa beigās.$project: Izmantojiet $project, lai izvēlētos konkrētus laukus no kolekcijas.$skip: Šajā posmā tiek ignorēts noteiktu skaitu dokumentu. To var norādīt ar opciju.$sort: Šī darbība šķiro dokumentus lietotāja kolekcijā. Tomēr dokumenti netiek mainīti tālāk.$unset: $unset izslēdz noteiktus laukus. Tas darbojas pretēji $project.
Apvienošanas piemērs MongoDB
Lai palīdzētu jums labāk izprast, kā darbojas agregācija MongoDB, mēs parādīsim dažus piemērus par dažādiem posmiem un to, kā tos izmantot. Lai izmantotu MongoDB agregāciju, atveriet čaulu kā administrators. Parasti vispirms tiek parādīta testa datu bāze. Ja vēlaties izmantot citu datu bāzi, izmantojiet komandu use.
Šajā piemērā iedomāsimies datu bāzi, kas satur datus par klientiem, kuri ir iegādājušies konkrētu produktu. Vienkāršības labad šajā datu bāzē ir tikai desmit dokumenti, kuri visi ir strukturēti vienādi:
{
"name" : "Smith",
"city" : "Glasgow",
"country" : "Scotland",
"quantity" : 14
}shellIr iekļauta šāda informācija par klientiem: viņu vārds, dzīvesvieta, valsts un iegādāto produktu skaits.
Ja vēlaties izmēģināt agregāciju MongoDB, varat izmantot metodi insertMany ( ), lai pievienotu visus dokumentus ar klientu datiem kolekcijai ar nosaukumu „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 }
] )shellTiks parādīts objektu ID saraksts katram atsevišķam dokumentam.
Kā lietot $match
Lai ilustrētu apkopojuma iespējas MongoDB, vispirms piemērosim $match posmu mūsu „klientu” kolekcijai. Bez papildu parametriem tas vienkārši izvadītu pilnu iepriekš minēto klientu datu sarakstu.
Tomēr šajā piemērā mēs esam norādījuši, lai tiek parādīti tikai klienti no Itālijas. Šī ir komanda:
db.customers.aggregate ( [
{ $match : { "country" : "Italy" } }
] )shellTagad tiks parādīti tikai objektu identifikatori un informācija par diviem klientiem no Itālijas.
Izmantojiet $sort, lai iegūtu labāku pārskatu
Ja vēlaties organizēt savu klientu datu bāzi, varat izmantot $sort posmu. Turpmākajā piemērā mēs norādām sistēmai, lai tā visus klientu datus šķirotu atbilstoši iegādāto vienību skaitam, sākot ar vislielāko skaitu. Ievade izskatās šādi:
db.customers.aggregate ( [
{ $sort : { "quantity" : -1 } }
] )shellIerobežojiet izvadi ar $project
Izmantojot līdz šim izmantotos posmus, redzēsiet, ka izvade ir salīdzinoši plaša. Piemēram, papildus faktiskajai informācijai dokumentos vienmēr tiek izvadīts arī objekta ID. MongoDB agregācijas cauruļvadā varat izmantot $project, lai noteiktu, kāda informācija ir jāizvada. Lai to izdarītu, nepieciešamajiem laukiem iestatām vērtību 1, bet laukiem, kas nav jāiekļauj izvadē, — vērtību 0. Mūsu piemērā mēs vēlamies redzēt tikai klienta vārdu un iegādāto produktu skaitu. Lai to izdarītu, mēs ievadām šādu komandu:
db.customers.aggregate ( [
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
] )shellApvienojiet vairākus posmus ar agregāciju MongoDB
MongoDB agregācija piedāvā arī iespēju piemērot vairākus posmus secīgi. Tie tiek izpildīti viens pēc otra, un beigās tiek iegūts rezultāts, kurā ņemti vērā visi vēlamie parametri. Piemēram, ja vēlaties parādīt tikai skotu klientu vārdus un pirkumus dilstošā secībā, varat izmantot iepriekš aprakstītos posmus šādi:
db.customers.aggregate ( [
{ $match : { "country" : "Scotland" } }
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
{ $sort : { "quantity" : -1 } }
] )shell60d998b3c0b60c9c3df84ab9635a326f
5ea2c6aa6c01a3ab74e73bb4a8493f37
4912435f410819dd8f176a25ddca2f57
1ebfad88c76b8712c9f747c586dae3d2