Aggregering i MongoDB er et verdifullt verktøy for analyse og filtrering av databaser. Rørledningssystemet gjør det mulig å spesifisere spørsmål, noe som gir svært tilpassede resultater.

Hva er aggregering i MongoDB?

MongoDB er en ikke-relasjonell og dokumentorientert database som er designet for bruk med store og varierte datamengder. Ved å fravike rigide tabeller og bruke teknikker som sharding (lagring av data på forskjellige noder), kan NoSQL-løsningen skaleres horisontalt samtidig som den forblir svært fleksibel og motstandsdyktig mot feil.

Dokumenter i det binære JSON-formatet BSON er samlet i samlinger og kan søkes og redigeres ved hjelp av MongoDB Query Language (MQL). Selv om dette språket tilbyr mange muligheter, er det ikke egnet (eller kanskje ikke egnet nok) for dataanalyse. Derfor tilbyr MongoDB aggregering.

I informatikk refererer dette begrepet til ulike prosesser. I MongoDB refererer aggregering til analyse og oppsummering av data ved hjelp av ulike operasjoner for å produsere et enkelt og klart resultat. Under denne prosessen analyseres og filtreres data fra ett eller flere dokumenter i henhold til brukerdefinerte faktorer.

I de følgende avsnittene ser vi ikke bare på mulighetene som MongoDB-aggregering gir for omfattende dataanalyse, men gir også eksempler på hvordan du kan bruke aggregate ( ) med et databasestyringssystem.

Hva trenger jeg for MongoDB-aggregering?

Det er bare noen få krav for å bruke aggregering i MongoDB. Metoden utføres i skallet og fungerer i henhold til logiske regler som du kan tilpasse for å møte behovene til analysen din.

For å bruke aggregering i Mongo DB må du allerede ha MongoDB installert på datamaskinen din. Hvis ikke, kan du finne ut hvordan du laster ned, installerer og kjører databasen i vår omfattende MongoDB-veiledning.

Du bør også bruke en kraftig brannmur og sørge for at databasen din er konfigurert i henhold til alle gjeldende sikkerhetsstandarder. For å kjøre aggregering i MongoDB du ha administratorrettigheter.

Databasen fungerer på alle plattformer, så trinnene beskrevet nedenfor gjelder for alle operativsystemer.

Hva er rørledningen i MongoDB-aggregeringsrammeverket?

I MongoDB kan du utføre enkle søk eller spørringer, og databasen viser resultatene umiddelbart. Denne metoden er imidlertid svært begrenset, da den kun kan vise resultater som allerede finnes i de lagrede dokumentene. Denne typen spørringer er ikke beregnet på dybdeanalyse, gjentakende mønstre eller for å utlede ytterligere informasjon.

Noen ganger må ulike kilder i en database tas i betraktning for å kunne trekke meningsfulle konklusjoner. MongoDB-aggregering brukes i slike situasjoner. For å oppnå slike resultater bruker metoden aggregate ( ) rørledninger.

Rørledningens rolle

Aggregeringsrørledninger i MongoDB er prosesser der eksisterende data analyseres og filtreres ved hjelp av ulike trinn for å vise resultatet brukerne leter etter. Disse trinnene kalles stadier. Avhengig av kravene kan ett eller flere stadier igangsettes. Disse utføres etter hverandre og endrer den opprinnelige inndataen slik at utdataene (informasjonen du leter etter) kan vises på slutten.

Mens inndata består av mange dataelementer, er utdata (dvs. sluttresultatet) entydig. Vi vil forklare de ulike trinnene i MongoDB-aggregering senere i denne delen.

Syntaks for MongoDB-aggregeringsrørledningen

Først er det verdt å ta en kort titt på syntaksen for aggregering i MongoDB. Metoden er alltid strukturert etter samme format og kan tilpasses dine spesifikke behov. Den grunnleggende strukturen ser slik ut:

db.collection_name.aggregate ( pipeline, options )
shell

Her er collection_name navnet på den aktuelle samlingen. Trinnene i MongoDB-aggregeringen er oppført under pipeline. options kan brukes til ytterligere valgfrie parametere som definerer utdataene.

Rørledningsfaser

Det finnes mange trinn i aggregeringsrørledningen i MongoDB. De fleste av dem kan brukes flere ganger i en rørledning. Det ville gå utover omfanget av denne artikkelen å liste opp alle alternativene her, spesielt siden noen av dem kun er nødvendige for svært spesifikke operasjoner. For å gi deg et inntrykk av trinnene, vil vi imidlertid liste opp noen av de mest brukte her:

  • $count: Dette trinnet gir deg en indikasjon på hvor mange BSON-dokumenter som er vurdert for trinnet eller trinnene i prosessen.
  • $group: Dette trinnet sorterer og grupperer dokumenter i henhold til bestemte parametere.
  • $limit: Begrenser antall dokumenter som sendes videre til neste trinn i prosessen.
  • $match: Med $match-trinnet begrenser du dokumentene som brukes til neste trinn.
  • $out: Dette trinnet brukes til å inkludere resultatene av MongoDB-aggregeringen i samlingen. Dette trinnet kan bare brukes på slutten av en pipeline.
  • $project: Bruk $project til å velge bestemte felt fra en samling.
  • $skip: Dette trinnet ignorerer et bestemt antall dokumenter. Du kan spesifisere dette med en opsjon.
  • $sort: Denne operasjonen sorterer dokumentene i brukerens samling. Dokumentene endres imidlertid ikke utover dette.
  • $unset: $unset ekskluderer visse felt. Den gjør det motsatte av hva $project gjør.

Et eksempel på aggregering i MongoDB

For å hjelpe deg med å bedre forstå hvordan aggregering i MongoDB fungerer, viser vi deg noen eksempler på ulike stadier og hvordan du bruker dem. For å bruke MongoDB-aggregering, åpner du skallet som administrator. Normalt vises en testdatabase først. Hvis du vil bruke en annen database, bruker du kommandoen use.

I dette eksemplet kan vi forestille oss en database som inneholder data om kunder som har kjøpt et bestemt produkt. For å gjøre det enkelt har denne databasen bare ti dokumenter, som alle har samme struktur:

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

Følgende opplysninger om kundene er inkludert: navn, bosted, land og antall produkter de har kjøpt.

Hvis du vil prøve aggregering i MongoDB, kan du bruke metoden insertMany ( ) til å legge til alle dokumenter med kundedata til samlingen med navnet «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

En liste over objekt-ID-er for hvert enkelt dokument vil bli vist.

Hvordan bruke $match

For å illustrere mulighetene for aggregering i MongoDB, vil vi først bruke $match-trinnet på vår «customers»-samling. Uten tilleggsparametere vil dette ganske enkelt gi en fullstendig liste over kundedataene som er oppført ovenfor.

I det følgende eksemplet har vi imidlertid bedt den om å bare vise oss kunder fra Italia. Her er kommandoen:

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

Nå vises bare objekt-ID-ene og informasjonen om de to kundene fra Italia.

Bruk $sort for å få en bedre oversikt

Hvis du vil organisere kundedatabasen din, kan du bruke $sort-trinnet. I følgende eksempel instruerer vi systemet om å sortere alle kundedata etter antall kjøpte enheter, med det høyeste antallet først. Inndataene ser slik ut:

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

Begrens utdataene med $project

Med trinnene som er brukt så langt, vil du se at utdataene er relativt omfattende. For eksempel vises alltid objekt-ID i tillegg til den faktiske informasjonen i dokumentene. Du kan bruke $project i MongoDB-aggregeringsrørledningen til å bestemme hvilken informasjon som skal vises. For å gjøre dette setter vi verdien 1 for obligatoriske felt og 0 for felt som ikke trenger å inkluderes i utdataene. I vårt eksempel ønsker vi bare å se kundenavnet og antall kjøpte produkter. For å gjøre dette skriver vi inn følgende:

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

Kombiner flere trinn med aggregering i MongoDB

MongoDB-aggregering gir deg også muligheten til å bruke flere trinn etter hverandre. Disse kjøres deretter etter hverandre, og til slutt får du et resultat som tar hensyn til alle ønskede parametere. Hvis du for eksempel bare vil vise navnene og kjøpene til skotske kunder i synkende rekkefølge, kan du bruke trinnene beskrevet ovenfor på følgende måte:

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

60d998b3c0b60c9c3df84ab9635a326f

5ea2c6aa6c01a3ab74e73bb4a8493f37

4912435f410819dd8f176a25ddca2f57

b6e4bbb337f54db7fc3b8fcae4fbadb9

Go to Main Menu