MongoDB - Indexing (Indeksiranje)
Kao i u svakoj bazi podataka tako i u MongoDB, indeksiranje je jako bitno zbog boljih performansi upita.
Ukoliko imate mnogo dokumenata unutar kolekcije, i napravite takav upit da se pronađe određeni dokument, u takvom slučaju MongoDB prolazi kroz celu kolekciju i dok ne pronađe odgovarajuća dokumenta, međutim ukoliko postoje index-i, MongoDB koristi te index-e da bi smanjio broj dokumenata kroz koje treba da prođe, i na taj način poboljšavaju se performanse pretraživanja.
Ipak ne treba se preterivati sa indeksiranjem polja, i bitno je napraviti dobru strukturu dokumenta i odrediti dobra polja za indeksiranje. Index može biti baziran na jednom polju ili na više polja u kolekciji. Mora se voditi računa o indeksima jer ukoliko postoji previse indeksiranih polja to može dovesti do smanjenja performansi operacija kao što su Insert, Delete ili Update.
Zadatak 28 - Unutar kolekcije student napraviti index od polja "student_id"
Za kreiranje index-a koristi se MongoDB metoda createIndex()
. Sintaksa je sledećadb.COLLECTION-NAME.createIndex({KEY:VALUE, .... })
. Pri čemu key
predstavlja polje koje će biti index a value
može imati vrednost 1 ili 0 zavisno od toga da li želite rastući ili opadajući redosled.
Rešenje
> use studenti
switched to db studenti
> db.student.createIndex({student_id:1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
Dodatak
Ono što dobijete kao odgovor od MongoDB kada napravite index je sledeće:
- numIndexesBefore: 1 - koliko indeksa je bilo pre pozvane metode
- numIndexesAfter: 2 - koliko indeksa ima posle pozvane metode
- ok: 1 - status da je indeksiranje uspešno prošlo
Zadatak 29 - Prikaži sve indekse unutar kolekcije student
Za prikaz svih Index-a unutar kolekcije koristi se MongoDB metoda getIndexes()
.
Sintaksa je sledeća db.COLLECTION-NAME.getIndexes()
.
Rešenje
> use studenti
switched to db studenti
> db.student.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "studenti.student"
},
{
"v" : 1,
"key" : {
"student_id" : 1
},
"name" : "student_id_1",
"ns" : "studenti.student"
}
]
Dodatak
Metoda getIndexes()
vraća dokument koji prikazuje listu svih indeksa. Ovde vidimo da imamo dva
...
"key" : {
"_id" : 1
},
...
"key" : {
"student_id" : 1
},
....
Broj jedan pokazuje da je izabran rastući redosled. (Ascending order).
Zadatak 30 - Obrisati Index "student_id" iz kolekcije student
Za brisanje Index-a u MongoDB-u koristi se dropIndex()
metod.
Sintaksa db.COLLECTION-NAME.dropindex({KEY:VALUE})
Rešenje
> use studenti
switched to db studenti
> db.student.dropIndex({student_id:1})
{ "nIndexesWas" : 2, "ok" : 1 }
Dodatak
Ukoliko želite da obrišete sve dodate Index-e možete koristi MongoDB metodu dropIndexes()
.
Sintaksa je db.COLLECTION-NAME.dropIndexes()
.
Zadatak 31 - Dodati Index sačinjen od polja "student_id" u opadajućem redosledu i "smer" u rastućem redosledu unutar kolekcije student
Rešenje
> use studenti
switched to db studenti
> db.student.createIndex({student_id: -1, smer: 1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}