Sådan håndteres avanceret databehandling med MongoDB's Aggregation Framework

MongoDB er kommet langt. Selvom der er mange NoSQL-databaser derude, er MongoDB den første database, der kommer til at tænke på, når man taler om NoSQL-databaser.

Selvom der altid har været lidt varme mellem mennesker, der kan lide SQL, og folk, der foretrækker NoSQL, er sandheden, databaser som MongoDB løser et andet problem.

Og de kan være rigtig praktiske, når man afleverer ustrukturerede data, hvor manipulation af formen af ​​data hurtigt og effektivt (og omdanner det til relevant viden) er mere nyttigt end den solide ydeevne, der leveres af SQL-databaser fra old school.

MongoDB leveres med en stærk ramme til at gøre dette - det vil sige manipulere data direkte på serveren: Aggregation Framework. Lad os komme ind i det og dække nogle hurtige punkter om det, hvad det er, og hvorfor det er vigtigt.

Hvad er Aggregation Framework?

Aggregationsrammen er bare en måde at forespørge på dokumenter i en samling i MongoDB. Denne ramme eksisterer, fordi når du begynder at arbejde med og manipulere data, er du ofte nødt til at knuse samlinger sammen, ændre dem, plukke felter, omdøbe felter, konkatere dem sammen, gruppere dokumenter efter felt, eksplodere matrix af felter i forskellige dokumenter osv. .

Dette kan ikke gøres af det traditionelle forespørgselssystem, som MongoDB leveres med (dvs. søgeforespørgsel eller opdateringsforespørgsel eller enhver anden forespørgsel, du muligvis har brugt).

Det enkle forespørgsel, der er angivet i MongoDB, giver dig kun mulighed for at hente hele eller dele af individuelle dokumenter. De giver dig ikke rigtig mulighed for at manipulere dokumenterne på serveren og derefter returnere dem til din applikation.

Det er her, aggregeringsrammen fra MongoDB kommer ind. Det er ikke noget eksternt, da aggregering kommer bagt ind i MongoDB. Du kan lære at arbejde med MongoDB-aggregationsrammen ved hjælp af denne gratis YouTube-afspilningsliste, jeg lavede.

Rørledning

Aggregationsrammen er afhængig af pipeline-konceptet. Lad os se et billede, der forklarer det på en bedre måde:

Her, som du kan se, samler vi en samling op og sender den gennem en rørledning. Denne rørledning består af visse faser, hvor visse operatører ændrer dokumenterne i samlingen ved hjælp af forskellige teknikker. Endelig returneres output til applikationen, der kalder forespørgslen.

Sammenlign det med en simpel forespørgsel, som find. Sikker på, det fungerer på de fleste måder, men det er ikke rigtig nyttigt, når du også vil ændre dataene, mens du henter dem.

Enten skal du hente dokumenterne og ændre dem i overensstemmelse hermed i applikationen på serveren, eller værre, du sender dem til klienten og lader frontend-koden ændre det for dig.

I begge tilfælde spilder du ressourcer og båndbredde. Således løser aggregeringsrammen pænt dette problem. Lad os se, hvordan det gør det med operatørerne.

Rørledningsoperatører

I MongoDB er rørledningen en matrix bestående af forskellige operatører, der tager en masse dokumenter i og spytter modificerede dokumenter i henhold til de regler, der er specificeret af programmøren. Den næste operatør tager de dokumenter, der er spyttet ud af den tidligere operatør, ind og kaldes derfor en pipeline.

Du kan have mange operatører i en pipeline, og disse operatører kan også gentages i modsætning til almindelige MongoDB-forespørgsler.

Lad os se på nogle almindelige rørledningsoperatører i MongoDB.

$ gruppe

Denne operatør giver dig mulighed for at gruppere en masse dokumenter sammen på basis af et bestemt felt i dokumenter. Det kan også bruges til at gruppere de forskellige felter i dokumenterne.

Jeg tror meget på ordsprogene, at et billede er 1000 ord værd. En video er 1000 billeder værd (godt, teknisk mange flere billeder, men okay), så lad os se en hurtig video om det:

$ match

Matchrørledningsoperatøren fungerer meget på samme måde som den almindelige findoperatør fungerer. Den gode ting ved dette er dog, at det kan bruges flere gange, fordi du er i et rørledningsmiljø! Dette gør det stærkt.

Lad os se, hvordan det bruges på en samling:

$ grænse

$ Skip-rørledningsoperatøren springer over de første N-dokumenter og sender resten af ​​dokumenterne til den næste operatør. Lad os se et hurtigt eksempel:

$ spring

$ Skip-rørledningsoperatøren springer de første N-dokumenter over og overfører resten af ​​dokumenterne til den næste operatør. Lad os se et hurtigt eksempel:

slappe af

Denne operatør er personligt min favorit. $ unwind optager et matrixfelt og eksploderer det i flere N-underdokumenter med det i-th-dokument, der indeholder den i-særlige værdi af arrayet som værdien for feltnavnet.

Kombineret med andre operatører som $ group og $ match bliver dette meget effektivt til databehandling. Lyder forvirrende? Lad os se på et simpelt eksempel:

$ -projekt

Projektoperatøren giver dig mulighed for at plukke en masse felter ud af hvert dokument og kassere resten. Ikke kun det, men du kan også omdøbe de plukkede felter, konkatstrengene, tage understrenge ud og meget mere!

Lad os se, hvordan dette fungerer i en nøddeskal:

Bedste fremgangsmåder til brug af Aggregation Framework

Med stor magt kommer stort ansvar. Du kan også nemt udnytte aggregeringsrammen til at udføre enkle forespørgsler, så det er vigtigt at sikre, at du ikke skriver dårlige databaseforespørgsler.

Til at begynde med skal du huske følgende punkter:

  1. MongoDB afviser enhver operatør, der tager mere end 100 MB RAM og kaster en fejl. Så sørg for at trimme dine data så hurtigt som muligt, da en enkelt operatør ikke skal tage mere end 100 MB hukommelse.
  2. Ordren betyder noget! At sætte $ match først reducerer antallet af dokumenter, der sendes til resten af ​​pipelinen. At sætte $-projektet næste vil derefter reducere størrelsen på et individuelt dokument yderligere ved at slippe af med felter.
  3. Endelig skal du sørge for at udføre alt det arbejde, der kræver brug af indekserede felter (sortering, matching osv.), Før du bruger operatører som $ project eller $ unwind. Dette skyldes, at disse operatører opretter nye dokumenter, der ikke har indekserne fra det originale dokument.

Konklusion

MongoDB er et fantastisk databaseværktøj og kan være virkelig nyttigt for små startups og virksomheder, der ønsker at gentage hurtigt. Dette skyldes delvis dets løse begrænsninger og tilgivende natur.

Jeg bruger MongoDB selv på codedamn - en platform for udviklere som dig, hvor alle lærer og forbinder!

Fred!