Hur man skapar ett unikt index i MongoDB

Hur Man Skapar Ett Unikt Index I Mongodb



I MongoDB säkerställer ett unikt index att varje värde i ett visst fält eller grupp av fält i en samling är unikt. Med metoden createIndex() kan vi skapa ett unikt indexfält för den specifika samlingen. För att upprätthålla dataintegriteten och undvika dubbla poster i viktiga områden är unika index användbara. Artikeln behandlade sätten att skapa ett unikt index för den specifika samlingen. db.candidates.insertMany([

{ namn: 'Alexa Bill' , betyg: 'A' , kurs: 'pytonorm' },

{ namn: 'Jane Marks' , betyg: 'B' , kurs: 'java' },

{ namn: 'Paul Ken' , betyg: 'C' , kurs: 'C#' },

{ namn: 'Emily Jeo' , betyg: 'D' , kurs: 'php' }

]);

Vi kan också skapa ett unikt indexfält när samlingen finns med några dokument inuti. För detta infogar vi dokumentet i den nya samlingen som är 'kandidater' vars fråga för infogning ges enligt följande:







Exempel 1: Skapa ett unikt index för ett enskilt fält

Vi kan skapa indexet med metoden createIndex() och vi kan göra det fältet unikt genom att ange det unika alternativet med det booleska 'true'.



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

Här initierar vi metoden createIndex() på samlingen 'kandidater' för att skapa ett unikt index för ett specifikt fält. Sedan ger vi 'betyg'-fältet värdet '1' för indexspecifikationen. Värdet på '1' representerar här samlingens stigande index. Därefter anger vi det 'unika' alternativet med det 'sanna' värdet för att framtvinga det unika i fältet 'betyg'.



Resultatet representerar att det unika indexet i fältet 'betyg' skapas för samlingen 'kandidater':





Exempel 2: Skapa ett unikt index över mer än ett fält

I det föregående exemplet skapas endast ett enda fält som ett unikt index. Men vi kan också skapa två fält som ett unikt index samtidigt med metoden createIndex().



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

Här kallar vi metoden createIndex() på samma 'kandidater'-samling. Vi anger två fält för metoden createIndex() – “grade” och “course” – med värdet “1” som det första uttrycket. Sedan ställer vi in ​​det unika alternativet med det 'sanna' värdet för att skapa dessa två unika fält.

Resultatet representerar två unika index, 'grade_1' och 'course_1', för följande 'candidates'-samling:

Exempel 3: Skapa ett sammansatt unikt index av fälten

Men vi kan också skapa ett unikt sammansatt index inom samma samling samtidigt. Vi uppnår detta genom följande fråga:

db.candidates.createIndex( { namn: 1 , betyg: 1 , kurs: 1 }, { unikt: sant }

Vi använder metoden createIndex() igen för att skapa det sammansatta unika indexet för samlingen 'kandidater'. Den här gången passerar vi tre fält - 'betyg', 'namn' och 'kurs' - som fungerar som stigande indexfält för samlingen 'kandidater'. Därefter anropar vi alternativet 'unika' för att göra fältet unikt eftersom 'true' tilldelas det alternativet.

Resultatet visar resultaten som visar att alla tre fälten nu är det unika indexet för den angivna samlingen:

Exempel 4: Skapa ett unikt index med dubbletter av fältvärden

Nu försöker vi skapa det unika indexet för det duplikatfältsvärde som utlöser ett fel för att bibehålla unikhetsbegränsningen.

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

Här tillämpar vi de unika indexkriterierna för fältet som innehåller liknande värden. Inuti createIndex()-metoden anropar vi fältet 'name' med värdet '1' för att göra det till ett unikt index och definierar det unika alternativet med värdet 'true'. Eftersom de två dokumenten har fältet 'namn' med identiska värden, kan vi inte göra det här fältet till ett unikt index för samlingen 'kandidater'. Duplikatnyckelfelet utlöses vid exekvering av frågan.

Som förväntat genererar utdata resultaten eftersom namnfältet har samma värden för två olika dokument:

Därför uppdaterar vi samlingen 'kandidater' genom att ge ett unikt värde till varje 'namn'-fält i dokumentet och skapar sedan 'namn'-fältet som det unika indexet. Genom att köra den frågan skapas vanligtvis 'namn'-fältet som det unika indexet som visas i följande:

Exempel 5: Skapa ett unikt index för ett saknat fält

Alternativt använder vi metoden createIndex() på fältet som inte finns i något av dokumenten i samlingen. Som ett resultat lagrar indexet ett nollvärde mot det fältet, och operationen misslyckas på grund av en överträdelse av fältets värde.

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

Här använder vi metoden createIndex() där 'e-post'-fältet tillhandahålls med värdet '1'. Fältet 'e-post' finns inte i samlingen 'kandidater' och vi försöker göra det till ett unikt index för samlingen 'kandidater' genom att ställa in det unika alternativet till 'true'.

När frågan för detta exekveras får vi felet i utdata eftersom 'e-post'-fältet saknas i 'kandidater'-samlingen:

Exempel 6: Skapa ett unikt index för ett fält med ett sparsamt alternativ

Därefter kan det unika indexet också skapas med alternativet sparse. Funktionaliteten med ett sparsamt index är att det bara inkluderar dokument som har det indexerade fältet, exklusive de dokument som inte har det indexerade fältet. Vi tillhandahöll följande struktur för att ställa in det sparsamma alternativet:

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

{ namn: 'unique_sparse_course_index' , unikt: sant, sparsamt: sant } )

Här tillhandahåller vi metoden createIndex() där 'kurs'-fältet är satt med värdet '1'. Efter det anger vi det ytterligare alternativet för att ställa in ett unikt indexfält som är 'kurs'. Alternativen inkluderar 'namnet' som anger indexet 'unique_sparse_course_index'. Sedan har vi det 'unika' alternativet som anges med 'sant'-värdet och alternativet 'glesa' är också inställt på 'sant'.

Utgången skapar ett unikt och sparsamt index i fältet 'kurs' som visas i följande:

Exempel 7: Visa det skapade unika indexet med metoden GetIndex()

I det föregående exemplet skapades endast ett unikt index för den angivna samlingen. För att se och få information om de unika indexen för 'kandidater'-samlingen använder vi följande getIndex()-metod:

db.candidates.getIndex();

Här anropar vi funktionen getIndex() på samlingen 'kandidater'. Funktionen getIndex() returnerar alla indexfält för samlingen 'kandidater' som vi skapade i de tidigare exemplen.

Utdatat visar det unika index som vi skapade för samlingen: antingen ett unikt index, ett sammansatt index eller det unika sparse indexet:

Slutsats

Vi försökte skapa ett unikt index för de specifika fälten i samlingen. Vi undersökte de olika sätten att skapa ett unikt index för ett enda fält och flera fält. Vi försökte också skapa ett unikt index där operationen misslyckas på grund av ett unikt regelbrott.