Sådan opretter du et unikt indeks i MongoDB

Sadan Opretter Du Et Unikt Indeks I Mongodb



I MongoDB sikrer et unikt indeks, at hver værdi i et bestemt felt eller gruppe af felter i en samling er unik. Ved hjælp af createIndex() metoden kan vi lave et unikt indeksfelt for den specifikke samling. Med det formål at bevare dataintegriteten og undgå duplikerede indtastninger i vitale felter er unikke indekser nyttige. Artiklen dækkede måderne at skabe et unikt indeks for den specifikke samling. db.candidates.insertMany([

{ navn: 'Alexa Bill' , karakter: 'EN' , Rute: 'python' },

{ navn: 'Jane Marks' , karakter: 'B' , Rute: 'java' },

{ navn: 'Paul Ken' , karakter: 'C' , Rute: 'C#' },

{ navn: 'Emily Jeo' , karakter: 'D' , Rute: 'php' }

]);

Vi kan også oprette et unikt indeksfelt, når samlingen er til stede med nogle dokumenter indeni. Til dette indsætter vi dokumentet i den nye samling, som er 'kandidater', hvis forespørgsel til indsættelse gives som følger:







Eksempel 1: Opret et unikt indeks for et enkelt felt

Vi kan oprette indekset ved hjælp af createIndex()-metoden, og vi kan gøre feltet unikt ved at angive den unikke mulighed med det boolske 'true'.



db.candidates.createIndex( { karakter: 1 }, { unik: sand } )

Her starter vi createIndex()-metoden på 'kandidater'-samlingen for at skabe et unikt indeks for et specifikt felt. Derefter giver vi 'karakter'-feltet værdien '1' for indeksspecifikationen. Værdien af ​​'1' repræsenterer her samlingens stigende indeks. Dernæst specificerer vi den 'unikke' mulighed med den 'sande' værdi for at håndhæve det unikke i feltet 'karakter'.



Outputtet repræsenterer, at det unikke indeks på 'karakter'-feltet er oprettet for 'kandidater'-samlingen:





Eksempel 2: Opret et unikt indeks over mere end ét felt

I det foregående eksempel oprettes kun et enkelt felt som et unikt indeks. Men vi kan også oprette to felter som et unikt indeks samtidigt ved at bruge createIndex() metoden.



db.candidates.createIndex( { karakter: 1 , Rute: 1 }, { unik: sand } )

Her kalder vi createIndex()-metoden på den samme 'kandidater'-samling. Vi specificerer to felter til createIndex()-metoden - 'grade' og 'course' - med værdien '1' som det første udtryk. Derefter indstiller vi den unikke mulighed med den 'sande' værdi for at skabe disse to unikke felter.

Outputtet repræsenterer to unikke indekser, 'grade_1' og 'course_1', for følgende 'candidates'-samling:

Eksempel 3: Opret et sammensat unikt indeks over felterne

Men vi kan også skabe et unikt sammensat indeks inden for samme samling samtidigt. Det opnår vi gennem følgende forespørgsel:

db.candidates.createIndex( { navn: 1 , karakter: 1 , Rute: 1 }, { unik: sand }

Vi bruger metoden createIndex() igen til at oprette det sammensatte unikke indeks for 'kandidater'-samlingen. Denne gang passerer vi tre felter - 'karakter', 'navn' og 'kursus' - som fungerer som de stigende indeksfelter for 'kandidater'-samlingen. Dernæst kalder vi den 'unikke' mulighed for at gøre feltet unikt, da 'sand' er tildelt denne mulighed.

Outputtet viser resultaterne, der viser, at alle tre felter nu er det unikke indeks for den angivne samling:

Eksempel 4: Opret et unikt indeks over duplikerede feltværdier

Nu forsøger vi at lave det unikke indeks for den duplikerede feltværdi, som udløser en fejl for at opretholde entydighedsbegrænsningen.

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

Her anvender vi de unikke indekskriterier for feltet, der indeholder lignende værdier. Inde i createIndex()-metoden kalder vi 'navn'-feltet med værdien '1' for at gøre det til et unikt indeks og definerer den unikke mulighed med den 'sande' værdi. Da de to dokumenter har feltet 'navn' med identiske værdier, kan vi ikke gøre dette felt til et unikt indeks over 'kandidater'-samlingen. Dubletnøglefejlen udløses ved udførelsen af ​​forespørgslen.

Som forventet genererer outputtet resultaterne, fordi navnefeltet har de samme værdier for to forskellige dokumenter:

Således opdaterer vi 'kandidater'-samlingen ved at give en unik værdi til hvert 'navn'-felt i dokumentet og opretter derefter 'navn'-feltet som det unikke indeks. Udførelse af denne forespørgsel opretter generelt 'navn'-feltet som det unikke indeks som vist i følgende:

Eksempel 5: Opret et unikt indeks over et manglende felt

Alternativt anvender vi metoden createIndex() på feltet, der ikke findes i nogen af ​​samlingens dokumenter. Som et resultat gemmer indekset en null-værdi i det felt, og handlingen mislykkes på grund af en overtrædelse af feltets værdi.

db.candidates.createIndex( { email: 1 }, { unik: sand } )

Her bruger vi createIndex()-metoden, hvor 'e-mail'-feltet er forsynet med værdien '1'. 'E-mail'-feltet findes ikke i 'kandidater'-samlingen, og vi forsøger at gøre det til et unikt indeks for 'kandidater'-samlingen ved at indstille den unikke mulighed til 'sand'.

Når forespørgslen til dette udføres, får vi fejlen i outputtet, da 'e-mail'-feltet mangler i 'kandidater'-samlingen:

Eksempel 6: Opret et unikt indeks for et felt med en sparsom indstilling

Dernæst kan det unikke indeks også oprettes med sparse mulighed. Funktionaliteten af ​​et sparsomt indeks er, at det kun inkluderer dokumenter, der har det indekserede felt, undtagen de dokumenter, der ikke har det indekserede felt. Vi leverede følgende struktur for at konfigurere den sparsomme mulighed:

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

{ navn: 'unique_sparse_course_index' , unik: sand, sparsom: sand } )

Her giver vi metoden createIndex() hvor 'kursus'-feltet er sat med værdien '1'. Derefter angiver vi den ekstra mulighed for at indstille et unikt indeksfelt, som er 'kursus'. Indstillingerne inkluderer 'navnet', som sætter 'unique_sparse_course_index'-indekset. Så har vi den 'unikke' mulighed, som er angivet med den 'sande' værdi, og 'sparse' indstillingen er også indstillet til 'sand'.

Outputtet skaber et unikt og sparsomt indeks på 'kursus'-feltet som vist i følgende:

Eksempel 7: Vis det oprettede unikke indeks ved hjælp af GetIndex()-metoden

I det foregående eksempel blev der kun oprettet et unikt indeks for den angivne samling. For at se og få oplysningerne om de unikke indekser for 'kandidater'-samlingen bruger vi følgende getIndex()-metode:

db.candidates.getIndex();

Her kalder vi funktionen getIndex() på samlingen 'kandidater'. Funktionen getIndex() returnerer alle indeksfelterne for samlingen 'kandidater', som vi oprettede i de foregående eksempler.

Outputtet viser det unikke indeks, som vi oprettede til samlingen: enten et unikt indeks, sammensat indeks eller det unikke sparse indeks:

Konklusion

Vi forsøgte at skabe et unikt indeks for de specifikke felter i samlingen. Vi undersøgte de forskellige måder at oprette et unikt indeks for et enkelt felt og flere felter. Vi forsøgte også at oprette et unikt indeks, hvor operationen mislykkes på grund af en unik overtrædelse af begrænsninger.