Kā izveidot unikālu indeksu MongoDB

Ka Izveidot Unikalu Indeksu Mongodb



MongoDB unikāls indekss nodrošina, ka katra vērtība noteiktā laukā vai lauku grupā kolekcijas iekšpusē ir unikāla. Izmantojot metodi createIndex(), mēs varam izveidot unikālu indeksa lauku konkrētajai kolekcijai. Lai saglabātu datu integritāti un izvairītos no dubultiem ierakstiem svarīgos laukos, noderīgi ir unikāli indeksi. Rakstā tika apskatīti veidi, kā izveidot unikālu indeksu konkrētajai kolekcijai. db.candidates.insertMany([

{ vārds: 'Aleksa Bils' , pakāpe: 'A' , kurss: 'pitons' },

{ vārds: 'Džeina Marksa' , pakāpe: 'B' , kurss: 'java' },

{ vārds: 'Pols Kens' , pakāpe: 'C' , kurss: 'C#' },

{ vārds: 'Emīlija Džeo' , pakāpe: 'D' , kurss: 'php' }

]);

Mēs varam arī izveidot unikālu indeksa lauku, ja kolekcija atrodas ar dažiem dokumentiem. Šim nolūkam mēs ievietojam dokumentu jaunajā kolekcijā, kas ir “kandidāti”, kuru ievietošanas vaicājums tiek sniegts šādi:







1. piemērs. Viena lauka unikāla indeksa izveide

Mēs varam izveidot indeksu, izmantojot metodi createIndex(), un mēs varam padarīt šo lauku unikālu, norādot unikālo opciju ar Būla vērtību “true”.



db.candidates.createIndex( { grade: 1 }, { unikāls: patiess } )

Šeit mēs iedarbinām metodi createIndex() kolekcijā “kandidāti”, lai izveidotu unikālu konkrēta lauka indeksu. Pēc tam mēs nodrošinām lauku “novērtējums” ar vērtību “1” indeksa specifikācijai. Vērtība “1” šeit apzīmē kolekcijas augošo indeksu. Pēc tam mēs norādām opciju “unikāls” ar vērtību “true”, lai nodrošinātu lauka “novērtējums” unikalitāti.



Izvade parāda, ka unikālais indekss laukā “vērtējums” ir izveidots kolekcijai “kandidāti”.





2. piemērs: izveidojiet unikālu vairāk nekā viena lauka indeksu

Iepriekšējā piemērā kā unikāls indekss ir izveidots tikai viens lauks. Bet mēs varam arī vienlaikus izveidot divus laukus kā unikālu indeksu, izmantojot metodi createIndex().



db.candidates.createIndex( { grade: 1 , kurss: 1 }, { unikāls: patiess } )

Šeit mēs izsaucam metodi createIndex() tajā pašā “kandidātu” kolekcijā. Metodei createIndex() mēs norādām divus laukus – “grade” un “course” – ar vērtību “1” kā pirmo izteiksmi. Pēc tam mēs iestatām unikālo opciju ar “true” vērtību, lai izveidotu šos divus unikālos laukus.

Izvade atspoguļo divus unikālus indeksus, “grade_1” un “course_1” šādai “kandidātu” kolekcijai:

3. piemērs. Izveidojiet saliktu unikālo lauku indeksu

Tomēr vienā un tajā pašā kolekcijā vienlaikus varam izveidot arī unikālu salikto indeksu. Mēs to panākam, izmantojot šādu vaicājumu:

db.candidates.createIndex( {nosaukums: 1 , pakāpe: 1 , kurss: 1 }, { unikāls: patiess }

Mēs atkal izmantojam metodi createIndex(), lai izveidotu salikto unikālo indeksu kolekcijai “kandidāti”. Šoreiz mēs izejam trīs laukus — “atzīme”, “nosaukums” un “kurss”, kas darbojas kā augošie indeksa lauki kolekcijai “kandidāti”. Tālāk mēs izsaucam opciju “unikāls”, lai padarītu lauku unikālu, jo šai opcijai tiek piešķirts “true”.

Izvadē tiek parādīti rezultāti, kas parāda, ka visi trīs lauki tagad ir norādītās kolekcijas unikālais indekss:

4. piemērs. Izveidojiet unikālu dublēto lauku vērtību indeksu

Tagad mēs cenšamies izveidot unikālu indeksu dublikāta lauka vērtībai, kas izraisa kļūdu, lai saglabātu unikalitātes ierobežojumu.

db.candidates.createIndex({nosaukums: 1 },{unikāls:true})

Šeit mēs izmantojam unikālos indeksa kritērijus laukam, kurā ir līdzīgas vērtības. Metodē createIndex() mēs izsaucam lauku “name” ar vērtību “1”, lai padarītu to par unikālu indeksu un definētu unikālo opciju ar “true” vērtību. Tā kā abiem dokumentiem ir lauks “nosaukums” ar identiskām vērtībām, mēs nevaram padarīt šo lauku par unikālu kolekcijas “kandidāti” indeksu. Dublētas atslēgas kļūda tiek aktivizēta pēc vaicājuma izpildes.

Kā paredzēts, izvade ģenerē rezultātus, jo nosaukuma laukam ir vienādas vērtības diviem dažādiem dokumentiem:

Tādējādi mēs atjauninām kolekciju “kandidāti”, piešķirot katram dokumenta laukam “nosaukums” unikālu vērtību un pēc tam izveidojam lauku “nosaukums” kā unikālo indeksu. Izpildot šo vaicājumu, parasti tiek izveidots lauks “nosaukums” kā unikāls indekss, kā parādīts tālāk norādītajā attēlā.

5. piemērs. Trūkstoša lauka unikāla indeksa izveide

Alternatīvi, mēs izmantojam metodi createIndex() laukā, kas nepastāv nevienā no kolekcijas dokumentiem. Rezultātā indekss šajā laukā saglabā nulles vērtību, un darbība neizdodas, jo ir pārkāpta lauka vērtība.

db.candidates.createIndex( { e-pasts: 1 }, { unikāls: patiess } )

Šeit mēs izmantojam metodi createIndex(), kur laukam “email” tiek nodrošināta vērtība “1”. Lauks “e-pasts” kolekcijā “kandidāti” nepastāv, un mēs cenšamies izveidot to par unikālu indeksu kolekcijai “kandidāti”, iestatot unikālo opciju uz “true”.

Kad vaicājums tiek izpildīts, izvadā tiek parādīta kļūda, jo kolekcijā “kandidāti” trūkst lauka “e-pasts”:

6. piemērs. Izveidojiet unikālu lauka indeksu, izmantojot retu opciju

Pēc tam unikālo indeksu var izveidot arī ar retināto opciju. Reta indeksa funkcionalitāte ir tāda, ka tas ietver tikai dokumentus, kuriem ir indeksētais lauks, izņemot dokumentus, kuriem nav indeksētā lauka. Mēs nodrošinājām šādu struktūru, lai iestatītu reto opciju:

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

{ vārds: 'unikāls_sparse_kursa_indekss' , unikāls: patiess, reti: patiess } )

Šeit mēs piedāvājam metodi createIndex(), kur laukam “kurss” ir iestatīta vērtība “1”. Pēc tam mēs norādām papildu opciju, lai iestatītu unikālu indeksa lauku, kas ir “kurss”. Opcijās ietilpst “nosaukums”, kas iestata indeksu “unique_sparse_course_index”. Pēc tam mums ir opcija “unikālā”, kas ir norādīta ar “true” vērtību, un opcija “reti” arī ir iestatīta uz “true”.

Izvade izveido unikālu un retu indeksu laukā “kurss”, kā parādīts tālāk:

7. piemērs. Parādiet izveidoto unikālo indeksu, izmantojot GetIndexes() metodi

Iepriekšējā piemērā nodrošinātajai kolekcijai tika izveidots tikai unikāls rādītājs. Lai skatītu un iegūtu informāciju par unikālajiem 'kandidātu' kolekcijas indeksiem, mēs izmantojam šādu metodi getIndexes():

db.candidates.getIndexes();

Šeit mēs izsaucam funkciju getIndexes() kolekcijā “kandidāti”. Funkcija getIndexes() atgriež visus indeksa laukus kolekcijai “kandidāti”, ko izveidojām iepriekšējos piemēros.

Izvadē tiek parādīts unikālais indekss, ko izveidojām kolekcijai: unikāls indekss, saliktais indekss vai unikāls rets indekss:

Secinājums

Mēs mēģinājām izveidot unikālu indeksu konkrētiem kolekcijas laukiem. Mēs izpētījām dažādus veidus, kā izveidot unikālu indeksu vienam laukam un vairākiem laukiem. Mēs arī mēģinājām izveidot unikālu indeksu, kurā darbība neizdodas unikāla ierobežojuma pārkāpuma dēļ.