Kaip sukurti unikalų indeksą MongoDB

Kaip Sukurti Unikalu Indeksa Mongodb



MongoDB unikalus indeksas užtikrina, kad kiekviena reikšmė tam tikrame lauke arba laukų grupėje kolekcijoje yra unikali. Naudodami CreateIndex() metodą, galime sukurti unikalų indekso lauką konkrečiai kolekcijai. Siekiant išlaikyti duomenų vientisumą ir išvengti pasikartojančių įrašų svarbiuose laukuose, naudingi unikalūs indeksai. Straipsnyje buvo aprašyti būdai, kaip sukurti unikalų konkrečios kolekcijos indeksą. db.candidates.insertMany([

{ vardas: 'Alexa Bill' , pažymys: 'A' , kursas: 'python' },

{ vardas: 'Jane Marks' , pažymys: 'B' , kursas: 'java' },

{ vardas: 'Paulius Kenas' , pažymys: 'C' , kursas: 'C#' },

{ vardas: 'Emily Jeo' , pažymys: 'D' , kursas: 'php' }

]);

Taip pat galime sukurti unikalų rodyklės lauką, kai kolekcijoje yra keletas dokumentų. Tam mes įterpiame dokumentą į naują rinkinį, kuris yra „kandidatai“, kurių įterpimo užklausa pateikiama taip:







1 pavyzdys: sukurkite unikalų vieno lauko indeksą

Indeksą galime sukurti naudodami createIndex() metodą, o tą lauką galime padaryti unikalų, nurodydami unikalią parinktį Būlio verte „true“.



db.candidates.createIndex( { grade: 1 }, { unikalus: tiesa } )

Čia inicijuojame „candidates“ kolekcijoje „createIndex()“ metodą, kad sukurtume unikalų konkretaus lauko indeksą. Tada „grade“ lauke pateikiame indekso specifikacijos reikšmę „1“. „1“ reikšmė čia reiškia didėjantį kolekcijos indeksą. Toliau nurodome parinktį „unikali“ su „true“ reikšme, kad būtų užtikrintas lauko „pažymys“ unikalumas.



Išvestis rodo, kad unikalus indeksas lauke „pažymiai“ sukurtas rinkiniui „kandidatai“:





2 pavyzdys: sukurkite unikalų daugiau nei vieno lauko indeksą

Ankstesniame pavyzdyje kaip unikalus indeksas sukuriamas tik vienas laukas. Bet mes taip pat galime sukurti du laukus kaip unikalų indeksą vienu metu naudodami createIndex() metodą.



db.candidates.createIndex( { grade: 1 , kursas: 1 }, { unikalus: tiesa } )

Čia mes vadiname createIndex() metodą toje pačioje „kandidatų“ kolekcijoje. Metodui createIndex() nurodome du laukus – „grade“ ir „course“ – su „1“ reikšme kaip pirmąja išraiška. Tada nustatome unikalią parinktį su „true“ verte, kad sukurtume šiuos du unikalius laukus.

Išvestis atspindi du unikalius indeksus „grade_1“ ir „course_1“, skirtus šiai „kandidatų“ kolekcijai:

3 pavyzdys: Sukurkite unikalų sudėtinį laukų indeksą

Tačiau mes taip pat galime sukurti unikalų sudėtinį indeksą toje pačioje kolekcijoje vienu metu. Tai pasiekiame naudodami šią užklausą:

db.candidates.createIndex( { pavadinimas: 1 , pažymys: 1 , kursas: 1 }, { unikalus: tiesa }

Norėdami sukurti unikalų sudėtinį „kandidatų“ rinkinio indeksą, dar kartą naudojame metodą createIndex(). Šį kartą praeiname tris laukus – „pažymys“, „vardas“ ir „kursas“, kurie veikia kaip didėjantys „kandidatų“ rinkinio rodyklės laukai. Tada vadiname „unikalią“ parinktį, kad laukas būtų unikalus, nes „true“ yra priskirtas prieš šią parinktį.

Išvestyje rodomi rezultatai, rodantys, kad visi trys laukai dabar yra unikalus nurodytos rinkinio indeksas:

4 pavyzdys: sukurkite unikalų pasikartojančių lauko reikšmių indeksą

Dabar bandome sukurti unikalų pasikartojančios lauko reikšmės indeksą, kuris suaktyvina klaidą, kad išlaikytume unikalumo apribojimą.

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

Čia taikome unikalius indekso kriterijus laukui, kuriame yra panašių verčių. Metodo createIndex() viduje mes iškviečiame lauką 'name' su reikšme '1', kad jis taptų unikaliu indeksu ir apibrėžtume unikalią parinktį su 'true' reikšme. Kadangi dviejuose dokumentuose yra „pavadinimo“ laukas su identiškomis reikšmėmis, negalime šio lauko padaryti unikaliu „kandidatų“ rinkinio indeksu. Pasikartojančio rakto klaida suaktyvinama vykdant užklausą.

Kaip ir tikėtasi, išvestis generuoja rezultatus, nes pavadinimo lauke yra tos pačios reikšmės dviem skirtingiems dokumentams:

Taigi mes atnaujiname kolekciją „kandidatai“, kiekvienam „vardo“ laukui dokumente suteikdami unikalią reikšmę, o tada sukuriame lauką „vardas“ kaip unikalų indeksą. Vykdant šią užklausą „pavadinimo“ laukas paprastai sukuriamas kaip unikalus indeksas, kaip parodyta toliau:

5 pavyzdys: sukurkite unikalų trūkstamo lauko indeksą

Arba taikome CreateIndex() metodą lauke, kurio nėra jokiame kolekcijos dokumente. Dėl to indeksas išsaugo nulinę šio lauko reikšmę, o operacija nepavyksta dėl lauko vertės pažeidimo.

db.candidates.createIndex( { el. paštas: 1 }, { unikalus: tiesa } )

Čia mes naudojame CreateIndex() metodą, kai lauke 'email' pateikiama reikšmė '1'. El. pašto laukas neegzistuoja rinkinyje „kandidatai“, todėl stengiamės, kad jis būtų unikalus rinkinio „kandidatai“ indeksas, nustatydami unikalią parinktį į „true“.

Kai vykdoma to užklausa, išvestyje gauname klaidą, nes kolekcijoje „kandidatai“ trūksta lauko „email“:

6 pavyzdys: Sukurkite unikalų lauko indeksą naudodami nedidelę parinktį

Tada unikalų indeksą taip pat galima sukurti naudojant retąją parinktį. Retos rodyklės funkcija yra ta, kad ji apima tik tuos dokumentus, kurie turi indeksuotą lauką, išskyrus dokumentus, kuriuose nėra indeksuoto lauko. Pateikėme tokią struktūrą, kad nustatytume retą parinktį:

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

{ vardas: 'unique_sparse_course_index' , unikalus: tikras, retas: tikras } )

Čia pateikiame „createIndex()“ metodą, kai „kurso“ laukas nustatomas su „1“ reikšme. Po to nurodome papildomą parinktį nustatyti unikalų indekso lauką, kuris yra „kursas“. Parinktys apima „pavadinimą“, kuris nustato „unique_sparse_course_index“ indeksą. Tada turime parinktį „unikali“, kuri nurodoma „true“ reikšme, o parinktis „reta“ taip pat nustatyta į „true“.

Išvestis sukuria unikalų ir negausų indeksą lauke „kursas“, kaip parodyta toliau:

7 pavyzdys: Rodyti sukurtą unikalų indeksą naudojant GetIndexes() metodą

Ankstesniame pavyzdyje pateiktai kolekcijai buvo sukurtas tik unikalus indeksas. Norėdami peržiūrėti ir gauti informaciją apie unikalius „kandidatų“ rinkinio indeksus, naudojame šį getIndexes() metodą:

db.candidates.getIndexes();

Čia mes vadiname funkciją getIndexes() kolekcijoje „kandidatai“. Funkcija getIndexes() grąžina visus „kandidatų“ rinkinio, kurį sukūrėme ankstesniuose pavyzdžiuose, indekso laukus.

Išvestyje rodomas unikalus indeksas, kurį sukūrėme kolekcijai: unikalus indeksas, sudėtinis indeksas arba unikalus retas indeksas:

Išvada

Bandėme sukurti unikalų indeksą tam tikriems kolekcijos laukams. Ištyrėme įvairius būdus, kaip sukurti unikalų vieno lauko ir kelių laukų indeksą. Taip pat bandėme sukurti unikalų indeksą, kai operacija nepavyksta dėl unikalaus apribojimo pažeidimo.