Hvordan lage en unik indeks i MongoDB

Hvordan Lage En Unik Indeks I Mongodb



I MongoDB sikrer en unik indeks at hver verdi i et bestemt felt eller gruppe av felt i en samling er unik. Ved å bruke createIndex()-metoden kan vi lage et unikt indeksfelt for den spesifikke samlingen. For å opprettholde dataintegriteten og unngå dupliserte oppføringer i vitale felt, er unike indekser nyttige. Artikkelen dekket måtene å lage en unik indeks for den spesifikke samlingen. db.candidates.insertMany([

{ Navn: 'Alexa Bill' , karakter: 'EN' , kurs: 'pyton' },

{ Navn: 'Jane Marks' , karakter: 'B' , kurs: 'java' },

{ Navn: 'Paul Ken' , karakter: 'C' , kurs: 'C#' },

{ Navn: 'Emily Jeo' , karakter: 'D' , kurs: 'php' }

]);

Vi kan også lage et unikt indeksfelt når samlingen er tilstede med noen dokumenter inne i den. For dette setter vi inn dokumentet i den nye samlingen som er 'kandidater' hvis forespørsel om innsetting er gitt som følger:







Eksempel 1: Lag en unik indeks for et enkelt felt

Vi kan lage indeksen ved å bruke createIndex()-metoden, og vi kan gjøre det feltet unikt ved å spesifisere det unike alternativet med den boolske 'true'.



db.candidates.createIndex( { karakter: 1 }, { unikt: sant } )

Her starter vi createIndex()-metoden på 'kandidater'-samlingen for å lage en unik indeks for et spesifikt felt. Deretter gir vi 'karakter'-feltet verdien '1' for indeksspesifikasjonen. Verdien av '1' her representerer den stigende indeksen til samlingen. Deretter spesifiserer vi det 'unike' alternativet med den 'sanne' verdien for å håndheve det unike i feltet 'karakter'.



Utdataene representerer at den unike indeksen på 'karakter'-feltet er opprettet for 'kandidater'-samlingen:





Eksempel 2: Lag en unik indeks over mer enn ett felt

I det forrige eksemplet opprettes bare et enkelt felt som en unik indeks. Men vi kan også lage to felt som en unik indeks samtidig ved å bruke createIndex()-metoden.



db.candidates.createIndex( { karakter: 1 , kurs: 1 }, { unikt: sant } )

Her kaller vi createIndex()-metoden på den samme 'kandidater'-samlingen. Vi spesifiserer to felt til createIndex()-metoden – “grade” og “course” – med verdien av “1” som det første uttrykket. Deretter setter vi det unike alternativet med den 'sanne' verdien for å lage disse to unike feltene.

Utdataene representerer to unike indekser, 'grade_1' og 'course_1', for følgende 'candidates'-samling:

Eksempel 3: Lag en sammensatt unik indeks over feltene

Men vi kan også lage en unik sammensatt indeks innenfor samme samling samtidig. Dette oppnår vi gjennom følgende spørring:

db.candidates.createIndex( { navn: 1 , karakter: 1 , kurs: 1 }, { unikt: sant }

Vi bruker createIndex()-metoden igjen for å lage den sammensatte unike indeksen for 'kandidater'-samlingen. Denne gangen passerer vi tre felt – «karakter», «navn» og «kurs» – som fungerer som de stigende indeksfeltene for «kandidater»-samlingen. Deretter kaller vi det 'unike' alternativet for å gjøre feltet unikt ettersom 'true' er tilordnet det alternativet.

Utdataene viser resultatene som viser at alle tre feltene nå er den unike indeksen for den angitte samlingen:

Eksempel 4: Lag en unik indeks over dupliserte feltverdier

Nå prøver vi å lage den unike indeksen for duplikatfeltverdien som utløser en feil for å opprettholde unikhetsbegrensningen.

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

Her bruker vi de unike indekskriteriene for feltet som inneholder lignende verdier. Inne i createIndex()-metoden kaller vi 'navn'-feltet med verdien '1' for å gjøre det til en unik indeks og definerer det unike alternativet med 'true'-verdien. Siden de to dokumentene har «navn»-feltet med identiske verdier, kan vi ikke gjøre dette feltet til en unik indeks over «kandidater»-samlingen. Duplikatnøkkelfeilen utløses ved utføring av spørringen.

Som forventet genererer utdataene resultatene fordi navnefeltet har de samme verdiene for to forskjellige dokumenter:

Derfor oppdaterer vi «kandidater»-samlingen ved å gi en unik verdi til hvert «navn»-felt i dokumentet, og deretter oppretter vi «navn»-feltet som den unike indeksen. Når du utfører den spørringen, opprettes vanligvis 'navn'-feltet som den unike indeksen som vist i følgende:

Eksempel 5: Lag en unik indeks over et manglende felt

Alternativt bruker vi createIndex()-metoden på feltet som ikke finnes i noen av dokumentene i samlingen. Som et resultat lagrer indeksen en nullverdi mot det feltet, og operasjonen mislykkes på grunn av et brudd på feltets verdi.

db.candidates.createIndex( { email: 1 }, { unikt: sant } )

Her bruker vi createIndex()-metoden der 'e-post'-feltet er gitt med verdien '1'. «E-post»-feltet finnes ikke i «kandidater»-samlingen, og vi prøver å gjøre det til en unik indeks for «kandidater»-samlingen ved å sette det unike alternativet til «true».

Når spørringen for dette utføres, får vi feilen i utdata da 'e-post'-feltet mangler i 'kandidater'-samlingen:

Eksempel 6: Lag en unik indeks for et felt med et sparsomt alternativ

Deretter kan den unike indeksen også opprettes med det sparsomme alternativet. Funksjonen til en sparsom indeks er at den bare inkluderer dokumenter som har det indekserte feltet, unntatt dokumentene som ikke har det indekserte feltet. Vi ga følgende struktur for å sette opp det sparsomme alternativet:

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

{ Navn: 'unique_sparse_course_index' , unikt: sant, sparsomt: sant } )

Her gir vi metoden createIndex() hvor 'kurs'-feltet er satt med verdien '1'. Etter det spesifiserer vi tilleggsalternativet for å angi et unikt indeksfelt som er 'kurs'. Alternativene inkluderer 'navnet' som setter 'unique_sparse_course_index'-indeksen. Deretter har vi det 'unike' alternativet som er spesifisert med 'true'-verdien og 'sparse' alternativet er også satt til 'true'.

Utdataene skaper en unik og sparsom indeks på 'kurs'-feltet som vist i følgende:

Eksempel 7: Vis den opprettede unike indeksen ved hjelp av GetIndex()-metoden

I forrige eksempel ble det bare opprettet en unik indeks for den angitte samlingen. For å se og få informasjon om de unike indeksene for 'kandidater'-samlingen, bruker vi følgende getIndex()-metode:

db.candidates.getIndex();

Her kaller vi getIndex()-funksjonen på 'kandidater'-samlingen. GetIndex()-funksjonen returnerer alle indeksfeltene for 'kandidater'-samlingen som vi opprettet i de forrige eksemplene.

Utdataene viser den unike indeksen som vi opprettet for samlingen: enten en unik indeks, sammensatt indeks eller den unike sparsomme indeksen:

Konklusjon

Vi forsøkte å lage en unik indeks for de spesifikke feltene i samlingen. Vi utforsket de ulike måtene å lage en unik indeks for et enkelt felt og flere felt. Vi forsøkte også å lage en unik indeks der operasjonen mislykkes på grunn av et unikt brudd på begrensningene.