Cum să creați un index unic în MongoDB

Cum Sa Creati Un Index Unic In Mongodb



În MongoDB, un index unic asigură că fiecare valoare dintr-un anumit câmp sau grup de câmpuri dintr-o colecție este unică. Folosind metoda createIndex(), putem crea un câmp index unic pentru colecția specifică. În scopul menținerii integrității datelor și al evitării intrărilor duplicate în câmpurile vitale, sunt utile indecșii unici. Articolul a acoperit modalitățile de a crea un index unic pentru colecția specifică. db.candidates.insertMany([

{ Nume: „Alexa Bill” , nota: 'A' , desigur: 'piton' },

{ Nume: „Jane Marks” , nota: 'B' , desigur: 'java' },

{ Nume: 'Paul Ken' , nota: 'C' , desigur: „C#” },

{ Nume: „Emily Jeo” , nota: 'D' , desigur: 'php' }

]);

De asemenea, putem crea un câmp index unic atunci când colecția este prezentă cu unele documente în interiorul ei. Pentru aceasta, inserăm documentul în noua colecție care este „candidați” a căror interogare de inserare este dată după cum urmează:







Exemplul 1: Creați un index unic al unui singur câmp

Putem crea indexul folosind metoda createIndex() și putem face acel câmp unic prin specificarea opțiunii unice cu „adevărat” boolean.



db.candidates.createIndex( { nota: 1 }, { unic: adevărat } )

Aici, inițiam metoda createIndex() pe colecția „candidați” pentru a crea un index unic al unui anumit câmp. Apoi, oferim câmpului „notă” valoarea „1” pentru specificația indexului. Valoarea lui „1” reprezintă aici indicele ascendent al colecției. În continuare, specificăm opțiunea „unic” cu valoarea „adevărată” pentru a impune unicitatea câmpului „notă”.



Rezultatul reprezintă faptul că indexul unic din câmpul „notă” este creat pentru colecția „candidați”:





Exemplul 2: Creați un index unic cu mai mult de un câmp

În exemplul anterior, doar un singur câmp este creat ca index unic. Dar putem crea și două câmpuri ca index unic simultan folosind metoda createIndex().



db.candidates.createIndex( { nota: 1 , desigur: 1 }, { unic: adevărat } )

Aici, numim metoda createIndex() pe aceeași colecție „candidați”. Specificăm două câmpuri pentru metoda createIndex() – „notă” și „curs” – cu valoarea „1” ca primă expresie. Apoi, setăm opțiunea unică cu valoarea „adevărată” pentru a crea aceste două câmpuri unice.

Rezultatul reprezintă doi indici unici, „grade_1” și „course_1”, pentru următoarea colecție „candidați”:

Exemplul 3: Creați un index unic compus al câmpurilor

Cu toate acestea, putem crea și un index compus unic în cadrul aceleiași colecții simultan. Obținem acest lucru prin următoarea interogare:

db.candidates.createIndex( { nume: 1 , nota: 1 , desigur: 1 }, { unic: adevărat }

Folosim din nou metoda createIndex() pentru a crea indexul unic compus pentru colecția „candidați”. De data aceasta, trecem trei câmpuri – „notă”, „nume” și „curs” – care acționează ca câmpuri de index ascendent pentru colecția „candidați”. În continuare, numim opțiunea „unic” pentru a face câmpul unic deoarece „adevărat” este atribuit opțiunii respective.

Ieșirea afișează rezultatele care arată că toate cele trei câmpuri sunt acum indexul unic al colecției specificate:

Exemplul 4: Creați un index unic al valorilor câmpurilor duplicate

Acum, încercăm să facem indexul unic pentru valoarea câmpului duplicat care declanșează o eroare pentru a menține constrângerea de unicitate.

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

Aici, aplicăm criteriile de index unic pentru câmpul care conține valori similare. În cadrul metodei createIndex(), numim câmpul „nume” cu valoarea „1” pentru a-l face un index unic și definim opțiunea unică cu valoarea „adevărată”. Deoarece cele două documente au câmpul „nume” cu valori identice, nu putem face din acest câmp un index unic al colecției „candidați”. Eroarea cheii duplicate este declanșată la executarea interogării.

După cum era de așteptat, rezultatul generează rezultatele deoarece câmpul nume are aceleași valori pentru două documente diferite:

Astfel, actualizăm colecția „candidați” dând o valoare unică fiecărui câmp „nume” din document și apoi creăm câmpul „nume” ca index unic. Executarea acelei interogări creează, în general, câmpul „nume” ca index unic, după cum se arată în următoarele:

Exemplul 5: Creați un index unic al unui câmp lipsă

Alternativ, aplicăm metoda createIndex() pe câmpul care nu există în niciunul dintre documentele colecției. Ca rezultat, indexul stochează o valoare nulă pentru acel câmp, iar operația eșuează din cauza unei încălcări a valorii câmpului.

db.candidates.createIndex( { e-mail: 1 }, { unic: adevărat } )

Aici, folosim metoda createIndex() în care câmpul „e-mail” este furnizat cu valoarea „1”. Câmpul „e-mail” nu există în colecția „candidați” și încercăm să facem din acesta un index unic pentru colecția „candidați”, setând opțiunea unică la „adevărat”.

Când interogarea pentru aceasta este executată, primim eroarea în ieșire, deoarece câmpul „e-mail” lipsește din colecția „candidați”:

Exemplul 6: Creați un index unic al unui câmp cu o opțiune rară

În continuare, indexul unic poate fi creat și cu opțiunea rară. Funcționalitatea unui index rar este că include doar documentele care au câmpul indexat, excluzând documentele care nu au câmpul indexat. Am furnizat următoarea structură pentru a configura opțiunea rară:

db.candidates.createIndex( { curs: 1 },

{ Nume: „unique_sparse_course_index” , unic: adevărat, rar: adevărat } )

Aici, oferim metoda createIndex() în care câmpul „curs” este setat cu valoarea „1”. După aceea, specificăm opțiunea suplimentară pentru a seta un câmp index unic care este „curs”. Opțiunile includ „numele” care setează indexul „unique_sparse_course_index”. Apoi, avem opțiunea „unică”, care este specificată cu valoarea „adevărată”, iar opțiunea „spars” este, de asemenea, setată la „adevărat”.

Rezultatul creează un index unic și rar în câmpul „curs”, așa cum se arată în următoarele:

Exemplul 7: Afișați indexul unic creat folosind metoda GetIndexes().

În exemplul anterior, a fost creat doar un index unic pentru colecția furnizată. Pentru a vizualiza și obține informații despre indecșii unici pentru colecția „candidați”, folosim următoarea metodă getIndexes():

db.candidates.getIndexes();

Aici, numim funcția getIndexes() din colecția „candidați”. Funcția getIndexes() returnează toate câmpurile de index pentru colecția „candidați” pe care am creat-o în exemplele anterioare.

Rezultatul afișează indexul unic pe care l-am creat pentru colecție: fie un index unic, index compus, fie index unic rar:

Concluzie

Am încercat să creăm un index unic pentru câmpurile specifice ale colecției. Am explorat diferitele modalități de a crea un index unic pentru un singur câmp și mai multe câmpuri. De asemenea, am încercat să creăm un index unic în care operațiunea eșuează din cauza încălcării unei constrângeri unice.