Ag­re­gā­ci­ja MongoDB ir vērtīgs rīks datu bāzu analīzei un fil­trē­ša­nai. Pie­slē­gu­ma sistēma ļauj norādīt vai­cā­ju­mus, no­dro­ši­not ļoti in­di­vi­dua­li­zē­tus re­zul­tā­tus.

Kas ir ag­re­gā­ci­ja MongoDB?

MongoDB ir ne­sais­tī­ta un dokumentu orientēta datu bāze, kas ir paredzēta lie­to­ša­nai ar lieliem un daudz­vei­dī­giem datu apjomiem. At­kāp­jo­ties no stingrām tabulām un iz­man­to­jot tādus pa­ņē­mie­nus kā sa­da­lī­ša­na (datu glabāšana dažādos mezglos), NoSQL ri­si­nā­jums var tikt ho­ri­zon­tā­li mērogs, vien­lai­kus sa­gla­bā­jot augstu elastību un izturību pret kļūmēm.

Dokumenti binārā JSON formātā BSON ir apkopoti ko­lek­ci­jās, un tos var meklēt un rediģēt, iz­man­to­jot MongoDB vaicājumu valodu (MQL). Lai gan šī valoda piedāvā daudzas iespējas, tā nav piemērota (vai varbūt nav pie­tie­ka­mi piemērota) datu analīzei. Tāpēc MongoDB nodrošina ag­re­gā­ci­ju.

Da­torzi­nāt­nē šis termins attiecas uz dažādiem procesiem. MongoDB ag­re­gā­ci­ja attiecas uz datu analīzi un ap­ko­po­ju­mu, iz­man­to­jot dažādas ope­rā­ci­jas, lai iegūtu vienotu un skaidru rezultātu. Šī procesa laikā dati no viena vai vairākiem do­ku­men­tiem tiek analizēti un filtrēti at­bil­sto­ši lietotāja de­fi­nē­tiem faktoriem.

Turp­mā­ka­jās sadaļās mēs ne tikai ap­ska­tī­sim iespējas, ko MongoDB ag­re­gā­ci­ja piedāvā vi­s­ap­tve­ro­šai datu analīzei, bet arī sniegsim piemērus, kā var izmantot aggregate ( ) metodi ar datu bāzes pār­val­dī­bas sistēmu.

Kas man ne­pie­cie­šams MongoDB ag­re­gā­ci­jai?

MongoDB ag­re­gā­ci­jas iz­man­to­ša­nai ir tikai daži no­sa­cī­ju­mi. Metode tiek izpildīta čaulā un darbojas saskaņā ar loģiskiem no­tei­ku­miem, kurus var pielāgot savas analīzes va­ja­dzī­bām.

Lai izmantotu ag­re­gā­ci­ju Mongo DB, jūsu datorā jau jābūt in­sta­lē­tai MongoDB. Ja tā nav, mūsu vi­s­ap­tve­ro­ša­jā MongoDB apmācībā varat uzzināt, kā le­ju­pie­lā­dēt, instalēt un palaist datu bāzi.

Jums arī jāizmanto jaudīga ugunsmūra un jā­pār­lie­ci­nās, ka jūsu datu bāze ir kon­fi­gu­rē­ta at­bil­sto­ši visiem pa­šrei­zē­jiem drošības stan­dar­tiem. Lai veiktu ap­ko­po­ju­mu MongoDB, jums ir ne­pie­cie­ša­mas ad­mi­nis­tra­to­ra tiesības.

Datu bāze darbojas visās plat­for­mās, tādēļ zemāk ap­rak­stī­tie soļi attiecas uz visām ope­rē­tājsis­tē­mām.

Kas ir cau­ruļ­vads MongoDB ag­re­gā­ci­jas sistēmā?

MongoDB datu bāzē var veikt vien­kār­šas mek­lē­ša­nas vai vai­cā­ju­mus, un datu bāze uzreiz parāda re­zul­tā­tus. Tomēr šī metode ir ļoti ie­ro­be­žo­ta, jo tā var parādīt tikai re­zul­tā­tus, kas jau ir saglabāti do­ku­men­tos. Šāda veida vaicājumi nav paredzēti pa­dzi­ļi­nā­tai analīzei, at­kār­to­jo­šos modeļu mek­lē­ša­nai vai papildu in­for­mā­ci­jas iegūšanai.

Dažreiz, lai izdarītu nozīmīgus se­ci­nā­ju­mus, ir jāņem vērā dažādi avoti datu bāzē. Šādos gadījumos tiek izmantota MongoDB ag­re­gā­ci­ja. Lai sasniegtu šādus re­zul­tā­tus, aggregate ( ) metode izmanto cau­ruļ­va­dus.

Cau­ruļ­va­da nozīme

Ap­ko­po­ša­nas cau­ruļ­va­di MongoDB ir procesi, kuros esošie dati tiek analizēti un filtrēti, iz­man­to­jot 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 iz­pil­dī­tas viena pēc otras un maina jūsu sākotnējo ievadi, lai beigās varētu parādīt izvadi (in­for­mā­ci­ju, ko jūs meklējat).

Lai gan ievade sastāv no daudziem datiem, izvade (t. i., ga­la­re­zul­tāts) ir vienota. Šīs sadaļas tur­pi­nā­ju­mā iz­skaid­ro­sim dažādus MongoDB ag­re­gā­ci­jas posmus.

MongoDB ag­re­gā­ci­jas cau­ruļ­va­da sintakse

Vispirms ir vērts īsumā apskatīt ag­re­gā­ci­jas sintaksi MongoDB. Metode vienmēr ir struk­tu­rē­ta at­bil­sto­ši vienam un tam pašam formātam un var tikt pielāgota jūsu kon­krē­ta­jām prasībām. Pamata struktūra izskatās šādi:

db.collection_name.aggregate ( pipeline, options )
shell

Šeit collection_name ir at­tie­cī­gās ko­lek­ci­jas nosaukums. MongoDB ag­re­gā­ci­jas posmi ir uz­skai­tī­ti zem pipeline. options var izmantot papildu op­cio­nā­liem pa­ra­met­riem, kas definē izvadi.

Cau­ruļ­va­du posmi

MongoDB ag­re­gā­ci­jas cau­ruļ­va­dā ir daudz posmu. Lielākā daļa no tiem var tikt izmantoti vairākas reizes cau­ruļ­va­dā. Šajā rakstā nav iespējams uzskaitīt visas iespējas, jo dažas no tām ir ne­pie­cie­ša­mas tikai ļoti spe­ci­fis­kām darbībām. Tomēr, lai sniegtu priekš­sta­tu par posmiem, šeit uz­skai­tī­sim dažus no visbiežāk iz­man­to­ta­jiem:

  • $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 at­bil­sto­ši no­teik­tiem pa­ra­met­riem.
  • $limit: Ierobežo dokumentu skaitu, kas tiek nodots nākamajam posmam procesā.
  • $match: Ar posmu $match jūs ie­ro­be­žo­jat do­ku­men­tus, kas tiek izmantoti nākamajā posmā.
  • $out: Šis posms tiek izmantots, lai iekļautu MongoDB ap­ko­po­ju­ma re­zul­tā­tus kolekcijā. Šo posmu var izmantot tikai procesa beigās.
  • $project: Iz­man­to­jiet $project, lai izvēlētos konkrētus laukus no ko­lek­ci­jas.
  • $skip: Šajā posmā tiek ignorēts noteiktu skaitu dokumentu. To var norādīt ar opciju.
  • $sort: Šī darbība šķiro do­ku­men­tus lietotāja kolekcijā. Tomēr dokumenti netiek mainīti tālāk.
  • $unset: $unset izslēdz noteiktus laukus. Tas darbojas pretēji $project.

Ap­vie­no­ša­nas piemērs MongoDB

Lai palīdzētu jums labāk izprast, kā darbojas ag­re­gā­ci­ja MongoDB, mēs parādīsim dažus piemērus par dažādiem posmiem un to, kā tos izmantot. Lai izmantotu MongoDB ag­re­gā­ci­ju, atveriet čaulu kā ad­mi­nis­tra­tors. Parasti vispirms tiek parādīta testa datu bāze. Ja vēlaties izmantot citu datu bāzi, iz­man­to­jiet komandu use.

Šajā piemērā ie­do­mā­si­mies datu bāzi, kas satur datus par klientiem, kuri ir ie­gā­dā­ju­šies konkrētu produktu. Vien­kār­šī­bas labad šajā datu bāzē ir tikai desmit dokumenti, kuri visi ir struk­tu­rē­ti vienādi:

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

Ir iekļauta šāda in­for­mā­ci­ja par klientiem: viņu vārds, dzī­ves­vie­ta, valsts un iegādāto produktu skaits.

Ja vēlaties izmēģināt ag­re­gā­ci­ju MongoDB, varat izmantot metodi insertMany ( ), lai pie­vie­no­tu visus do­ku­men­tus ar klientu datiem ko­lek­ci­jai 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 }
] )
shell

Tiks parādīts objektu ID saraksts katram at­se­viš­ķam do­ku­men­tam.

Kā lietot $match

Lai ilustrētu ap­ko­po­ju­ma iespējas MongoDB, vispirms pie­mē­ro­sim $match posmu mūsu „klientu” ko­lek­ci­jai. Bez papildu pa­ra­met­riem tas vienkārši izvadītu pilnu iepriekš minēto klientu datu sarakstu.

Tomēr šajā piemērā mēs esam no­rā­dī­ju­ši, lai tiek parādīti tikai klienti no Itālijas. Šī ir komanda:

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

Tagad tiks parādīti tikai objektu iden­ti­fi­ka­to­ri un in­for­mā­ci­ja par diviem klientiem no Itālijas.

Iz­man­to­jiet $sort, lai iegūtu labāku pārskatu

Ja vēlaties organizēt savu klientu datu bāzi, varat izmantot $sort posmu. Turp­mā­ka­jā piemērā mēs norādām sistēmai, lai tā visus klientu datus šķirotu at­bil­sto­ši iegādāto vienību skaitam, sākot ar vis­lie­lā­ko skaitu. Ievade izskatās šādi:

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

Ie­ro­be­žo­jiet izvadi ar $project

Iz­man­to­jot līdz šim iz­man­to­tos posmus, redzēsiet, ka izvade ir sa­lī­dzi­no­ši plaša. Piemēram, papildus fak­tis­ka­jai in­for­mā­ci­jai do­ku­men­tos vienmēr tiek izvadīts arī objekta ID. MongoDB ag­re­gā­ci­jas cau­ruļ­va­dā varat izmantot $project, lai noteiktu, kāda in­for­mā­ci­ja ir jāizvada. Lai to izdarītu, ne­pie­cie­ša­ma­jiem 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 } }
] )
shell

Ap­vie­no­jiet vairākus posmus ar ag­re­gā­ci­ju MongoDB

MongoDB ag­re­gā­ci­ja 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š ap­rak­stī­tos posmus šādi:

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

60d998b3c0b60c9c3df84ab9635a326f

5ea2c6aa6c01a3ab74e73bb4a8493f37

4912435f410819dd8f176a25ddca2f57

1ebfad88c76b8712c9f747c586dae3d2

Go to Main Menu