Kako stvoriti jedinstveni indeks u MongoDB-u

Kako Stvoriti Jedinstveni Indeks U Mongodb U



U MongoDB-u, jedinstveni indeks osigurava da je svaka vrijednost u određenom polju ili grupi polja unutar kolekcije jedinstvena. Pomoću metode createIndex() možemo napraviti jedinstveno polje indeksa za određenu kolekciju. U svrhu održavanja integriteta podataka i izbjegavanja dvostrukih unosa u vitalnim poljima, korisni su jedinstveni indeksi. U članku su obrađeni načini izrade jedinstvenog kazala za određenu zbirku. db.candidates.insertMany([

{ Ime: 'Alexa Bill' , ocjena: 'A' , tečaj: 'piton' },

{ Ime: 'Jane Marks' , ocjena: 'B' , tečaj: 'Java' },

{ Ime: 'Paul Ken' , ocjena: 'C' , tečaj: 'C#' },

{ Ime: 'Emily Jeo' , ocjena: 'D' , tečaj: 'php' }

]);

Također možemo stvoriti jedinstveno indeksno polje kada je zbirka prisutna s nekim dokumentima unutar nje. U tu svrhu u novu zbirku umećemo dokument koji je 'kandidati' čiji je upit za umetanje dan na sljedeći način:







Primjer 1: Stvorite jedinstveni indeks jednog polja

Indeks možemo stvoriti pomoću metode createIndex() i to polje možemo učiniti jedinstvenim navođenjem jedinstvene opcije s Booleovim 'true'.



db.candidates.createIndex( { ocjena: 1 }, { jedinstveno: istinito } )

Ovdje pokrećemo metodu createIndex() na kolekciji 'kandidati' za stvaranje jedinstvenog indeksa određenog polja. Zatim dajemo polje 'ocjena' s vrijednošću '1' za specifikaciju indeksa. Vrijednost “1” ovdje predstavlja rastući indeks zbirke. Zatim navodimo opciju 'unique' s vrijednošću 'true' kako bismo nametnuli jedinstvenost polja 'grade'.



Izlaz predstavlja da je jedinstveni indeks u polju 'ocjena' kreiran za kolekciju 'kandidata':





Primjer 2: Stvorite jedinstveni indeks više od jednog polja

U prethodnom primjeru samo je jedno polje kreirano kao jedinstveni indeks. Ali također možemo kreirati dva polja kao jedinstveni indeks istovremeno pomoću metode createIndex().



db.candidates.createIndex( { ocjena: 1 , tečaj: 1 }, { jedinstveno: istinito } )

Ovdje pozivamo metodu createIndex() na istoj kolekciji 'kandidata'. Specificiramo dva polja za metodu createIndex() – “ocjena” i “tečaj” – s vrijednošću “1” kao prvim izrazom. Zatim smo postavili jedinstvenu opciju s vrijednošću 'true' kako bismo stvorili ova dva jedinstvena polja.

Izlaz predstavlja dva jedinstvena indeksa, 'grade_1' i 'course_1', za sljedeću kolekciju 'kandidata':

Primjer 3: Stvorite složeni jedinstveni indeks polja

Međutim, možemo stvoriti i jedinstveni složeni indeks unutar iste zbirke istovremeno. To postižemo sljedećim upitom:

db.candidates.createIndex( { ime: 1 , ocjena: 1 , tečaj: 1 }, { jedinstveno: istinito }

Ponovno koristimo metodu createIndex() za stvaranje složenog jedinstvenog indeksa za kolekciju 'kandidata'. Ovaj put prolazimo kroz tri polja – “ocjena”, “ime” i “tečaj” – koja djeluju kao uzlazna indeksna polja za zbirku “kandidata”. Zatim pozivamo opciju 'unique' kako bismo polje učinili jedinstvenim jer je 'true' dodijeljeno toj opciji.

Izlaz prikazuje rezultate koji pokazuju da su sva tri polja sada jedinstveni indeks navedene zbirke:

Primjer 4: Stvorite jedinstveni indeks dupliciranih vrijednosti polja

Sada pokušavamo napraviti jedinstveni indeks za dupliciranu vrijednost polja koja pokreće pogrešku radi održavanja ograničenja jedinstvenosti.

db.candidates.createIndex({ime: 1 },{unique:true})

Ovdje primjenjujemo jedinstveni kriterij indeksa za polje koje sadrži slične vrijednosti. Unutar metode createIndex() pozivamo polje 'name' s vrijednošću '1' kako bismo ga učinili jedinstvenim indeksom i definirali jedinstvenu opciju s vrijednošću 'true'. Budući da dva dokumenta imaju polje 'ime' s identičnim vrijednostima, ovo polje ne možemo učiniti jedinstvenim indeksom zbirke 'kandidati'. Pogreška duplikata ključa pokreće se nakon izvršenja upita.

Kao što je i očekivano, izlaz generira rezultate jer polje naziva ima iste vrijednosti za dva različita dokumenta:

Stoga ažuriramo zbirku 'kandidata' davanjem jedinstvene vrijednosti svakom polju 'ime' u dokumentu, a zatim stvaramo polje 'ime' kao jedinstveni indeks. Izvršavanje tog upita općenito stvara polje 'name' kao jedinstveni indeks kao što je prikazano u nastavku:

Primjer 5: Napravite jedinstveni indeks polja koje nedostaje

Alternativno, primjenjujemo metodu createIndex() na polje koje ne postoji ni u jednom dokumentu zbirke. Kao rezultat toga, indeks pohranjuje nultu vrijednost prema tom polju, a operacija ne uspijeva zbog kršenja vrijednosti polja.

db.candidates.createIndex( { email: 1 }, { jedinstveno: istinito } )

Ovdje koristimo metodu createIndex() gdje je polje 'e-pošta' navedeno s vrijednošću '1'. Polje 'e-pošta' ne postoji u zbirci 'kandidati' i pokušavamo ga učiniti jedinstvenim indeksom za zbirku 'kandidati' postavljanjem jedinstvene opcije na 'istinito'.

Kada se upit za ovo izvrši, dobivamo pogrešku u izlazu jer polje 'e-pošta' nedostaje u kolekciji 'kandidata':

Primjer 6: Stvorite jedinstveni indeks polja s opcijom Sparse

Zatim, jedinstveni indeks također se može stvoriti s prorijeđenom opcijom. Funkcionalnost rijetkog indeksa je da uključuje samo dokumente koji imaju indeksirano polje, isključujući dokumente koji nemaju indeksirano polje. Osigurali smo sljedeću strukturu za postavljanje prorijeđene opcije:

db.candidates.createIndex( { tečaj: 1 },

{ Ime: 'unique_sparse_course_index' , jedinstveno: istinito, rijetko: istinito } )

Ovdje nudimo metodu createIndex() gdje je polje 'tečaj' postavljeno s vrijednošću '1'. Nakon toga specificiramo dodatnu opciju za postavljanje jedinstvenog indeksnog polja koje je 'tečaj'. Opcije uključuju “name” koji postavlja indeks “unique_sparse_course_index”. Zatim, imamo opciju 'unique' koja je navedena s vrijednošću 'true', a opcija 'sparse' također je postavljena na 'true'.

Izlaz stvara jedinstveni i rijetki indeks u polju 'tečaj' kao što je prikazano u nastavku:

Primjer 7: Prikaži stvoreni jedinstveni indeks pomoću metode GetIndexes().

U prethodnom primjeru stvoren je samo jedinstveni indeks za danu zbirku. Za pregled i dobivanje informacija o jedinstvenim indeksima za kolekciju 'kandidata', koristimo sljedeću metodu getIndexes():

db.candidates.getIndexes();

Ovdje pozivamo funkciju getIndexes() na kolekciji 'kandidata'. Funkcija getIndexes() vraća sva polja indeksa za kolekciju 'kandidata' koju smo stvorili u prethodnim primjerima.

Izlaz prikazuje jedinstveni indeks koji smo stvorili za kolekciju: ili jedinstveni indeks, složeni indeks ili jedinstveni prorijeđeni indeks:

Zaključak

Pokušali smo stvoriti jedinstveni indeks za određena polja zbirke. Istražili smo različite načine za stvaranje jedinstvenog indeksa za jedno polje i više polja. Također smo pokušali stvoriti jedinstveni indeks gdje operacija ne uspije zbog kršenja jedinstvenog ograničenja.