Indekser er meget vigtige i enhver database, og det er ikke anderledes med MongoDB. Med brugen af indekser bliver det mere effektivt at udføre forespørgsler i MongoDB.
Hvis du havde en samling med tusindvis af dokumenter uden indekser, og du så forespørger for at finde bestemte dokumenter, så ville MongoDB i et sådant tilfælde skulle scanne hele samlingen for at finde dokumenterne. Men hvis du havde indekser, ville MongoDB bruge disse indekser til at begrænse antallet af dokumenter, der skulle gennemsøges i samlingen.
Indekser er særlige datasæt, som gemmer en del af samlingens data. Da dataene er delvise, bliver det lettere at læse disse data. Dette delvise sæt gemmer værdien af et bestemt felt eller et sæt af felter ordnet efter værdien af feltet.
I denne tutorial lærer du –
- Forståelse af virkningen af indekser
- Sådan opretter du indekser: createIndex()
- Sådan finder du indekser: getindexes()
- Sådan sletter du indekser: Dropindex()
Forståelse af virkningen af indekser
Nu, selv om vi fra indledningen har set, at indekser er gode for forespørgsler, kan for mange indekser gøre andre operationer langsommere, f.eks. indsættelse, sletning og opdatering.
Hvis der ofte udføres indsætnings-, sletnings- og opdateringsoperationer på dokumenter, vil indeksene skulle ændres så ofte, hvilket blot vil være et overhead for samlingen.
Det nedenstående eksempel viser et eksempel på, hvilke feltværdier der kan udgøre et indeks i en samling. Et indeks kan enten være baseret på blot ét felt i samlingen, eller det kan være baseret på flere felter i samlingen.
I nedenstående eksempel bruges Employeeid “1” og EmployeeCode “AA” til at indeksere dokumenterne i samlingen. Så når der foretages en forespørgselssøgning, vil disse indekser blive brugt til hurtigt og effektivt at finde de ønskede dokumenter i samlingen.
Så selv hvis søgeforespørgslen er baseret på EmployeeCode “AA”, vil dette dokument blive returneret.
Sådan oprettes indekser: createIndex()
Skabelse af et indeks i MongoDB sker ved hjælp af “createIndex”-metoden.
Det følgende eksempel viser, hvordan man tilføjer indeks til samling. Lad os antage, at vi har vores samme Employee collection, som har feltnavnene “Employeeid” og “EmployeeName”.
db.Employee.createIndex({Employeeid:1})
Kodeforklaring:
- Metoden createIndex bruges til at oprette et indeks baseret på dokumentets “Employeeid”.
- Parameteren ‘1’ angiver, at når indekset oprettes med “Employeeid”-feltværdierne, skal de sorteres i stigende orden. Bemærk venligst, at dette er forskelligt fra _id-feltet (id-feltet bruges til at identificere hvert dokument i samlingen entydigt), som oprettes automatisk i samlingen af MongoDB. Dokumenterne vil nu blive sorteret i henhold til Employeeid-feltet og ikke _id-feltet.
Hvis kommandoen udføres med succes, vises følgende Output:
Output:
- Den numIndexesBefore: 1 angiver antallet af feltværdier (De faktiske felter i samlingen), som var der i indeksene, før kommandoen blev kørt. Husk, at hver samling har feltet _id, som også tæller som en Field-værdi til indekset. Da indeksfeltet _id er en del af samlingen, når den oprettes første gang, er værdien af numIndexesBefore 1.
- Den numIndexesAfter: 2 angiver antallet af feltværdier, der var der i indeksene, efter at kommandoen blev kørt.
- Her er “ok: 1” output angiver, at operationen var vellykket, og det nye indeks er tilføjet til samlingen.
Overstående kode viser, hvordan man opretter et indeks baseret på én feltværdi, men man kan også oprette et indeks baseret på flere feltværdier.
Det følgende eksempel viser, hvordan dette kan gøres;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Kodeforklaring:
- Metoden createIndex tager nu hensyn til flere feltværdier, hvilket nu vil medføre, at indekset oprettes baseret på “Employeeid” og “EmployeeName”. Employeeid:1 og EmployeeName:1 angiver, at indekset skal oprettes på disse 2 feltværdier, idet :1 angiver, at det skal være i stigende rækkefølge.
Sådan finder du indekser: getindexes()
Find et indeks i MongoDB sker ved hjælp af “getIndexes”-metoden.
Det følgende eksempel viser, hvordan dette kan gøres;
db.Employee.getIndexes()
Kodeforklaring:
- Metoden getIndexes bruges til at finde alle indekser i en samling.
Hvis kommandoen udføres med succes, vises følgende Output:
- Såfremt kommandoen udføres med succes, vil følgende Output blive vist:
Output:
- Outputtet returnerer et dokument, der blot viser, at der er 2 indekser i samlingen, som er _id-feltet, og det andet er Employee id-feltet. :1 angiver, at feltværdierne i indekset er oprettet i stigende rækkefølge.
Sådan sletter du indekser: dropindex()
Fjernelse af et indeks i MongoDB sker ved hjælp af dropIndex-metoden.
Det følgende eksempel viser, hvordan dette kan gøres;
db.Employee.dropIndex(Employeeid:1)
Kodeforklaring:
- DropIndex-metoden tager de nødvendige feltværdier, som skal fjernes fra indekset.
Hvis kommandoen udføres med succes, vises følgende Output:
Output:
- Den nIndexesWas: 3 angiver antallet af feltværdier, som var der i indeksene, før kommandoen blev kørt. Husk, at hver samling har feltet _id, som også tæller som en Field-værdi til indekset.
- Den ok: 1 output angiver, at operationen var vellykket, og feltet “Employeeid” er fjernet fra indekset.
For at fjerne alle indekser på én gang i samlingen kan man bruge kommandoen dropIndexes.
Det følgende eksempel viser, hvordan dette kan gøres.
db.Employee.dropIndex()
Kodeforklaring:
- Med metoden dropIndexes slettes alle indekser undtagen _id-indekset.
Hvis kommandoen udføres med succes, vises følgende Output:
Output:
- Den nIndexesWas: 2 angiver antallet af feltværdier, der var der i indeksene, før kommandoen blev kørt.
- Husk igen, at hver samling har _id-feltet, som også tæller som en Field-værdi til indekset, og det vil ikke blive fjernet af MongoDB, og det er det, som denne meddelelse angiver.
- Den ok: 1 output angiver, at operationen var vellykket.
Summary
- Definition af indekser er vigtig for hurtigere og effektiv søgning af dokumenter i en samling.
- Indekser kan oprettes ved hjælp af metoden createIndex. Indekser kan oprettes på kun ét felt eller på flere feltværdier.
- Indekser kan findes ved hjælp af getIndexes-metoden.
- Indekser kan fjernes ved hjælp af dropIndex for enkelte indekser eller dropIndexes for at droppe alle indekser.