Kuidas luua MongoDB-s ainulaadset indeksit

Kuidas Luua Mongodb S Ainulaadset Indeksit



MongoDB-s tagab ainulaadne indeks, et kogu konkreetse välja või väljade rühma iga väärtus on kordumatu. Meetodi createIndex() abil saame konkreetsele kogule teha ainulaadse indeksivälja. Andmete terviklikkuse säilitamiseks ja oluliste väljade topeltkirjete vältimiseks on abiks kordumatud indeksid. Artiklis käsitleti konkreetse kogu jaoks ainulaadse indeksi loomise viise. db.candidates.insertMany([

{ nimi: 'Alexa Bill' , hinne: 'A' , muidugi: 'püüton' },

{ nimi: 'Jane Marks' , hinne: 'B' , muidugi: 'java' },

{ nimi: 'Paul Ken' , hinne: 'C' , muidugi: 'C#' },

{ nimi: 'Emily Jeo' , hinne: 'D' , muidugi: 'php' }

]);

Samuti saame luua unikaalse registrivälja, kui kogu on olemas koos mõne dokumendiga. Selleks lisame uude kogusse dokumendi, mis on 'kandidaadid', kelle sisestamise päring on esitatud järgmiselt:







Näide 1: Looge ühe välja kordumatu indeks

Indeksi saame luua meetodil createIndex() ja saame selle välja ainulaadseks muuta, määrates unikaalse suvandi Boole'i ​​väärtusega 'true'.



db.candidates.createIndex( { hinne: 1 }, { unikaalne: tõsi } )

Siin käivitame 'kandidaatide' kollektsioonis meetodi createIndex(), et luua konkreetse välja kordumatu indeks. Seejärel esitame väljale 'hinne' indeksi spetsifikatsiooni jaoks väärtuse '1'. Väärtus „1” tähistab siin kollektsiooni kasvavat indeksit. Järgmisena määrame välja 'hinne' unikaalsuse jõustamiseks suvandi 'unikaalne' väärtusega 'true'.



Väljund näitab, et unikaalne indeks väljal 'hinne' luuakse kogu 'kandidaadid' jaoks:





Näide 2: looge kordumatu indeks rohkem kui ühest väljast

Eelmises näites luuakse kordumatu indeksina ainult üks väli. Kuid me saame luua ka kaks välja unikaalse indeksina korraga, kasutades meetodit createIndex().



db.candidates.createIndex( { hinne: 1 , muidugi: 1 }, { unikaalne: tõsi } )

Siin kutsume samas kogus 'kandidaatide' meetodit createIndex(). Määrame meetodi createIndex() jaoks kaks välja – “hinne” ja “kursus” – esimese avaldisena väärtusega “1”. Seejärel määrame nende kahe ainulaadse välja loomiseks unikaalse valiku tõeväärtusega.

Väljund esindab kahte unikaalset indeksit, 'grade_1' ja 'course_1', järgmise 'kandidaatide' kogu jaoks:

Näide 3: Looge väljade unikaalne liitindeks

Samas saame samas kogus üheaegselt luua ka ainulaadse liitindeksi. Selle saavutame järgmise päringu kaudu:

db.candidates.createIndex( { nimi: 1 , hinne: 1 , muidugi: 1 }, { unikaalne: tõsi }

Kasutame taas meetodit createIndex(), et luua kogu 'kandidaatide' jaoks kordumatu liitindeks. Seekord läbime kolm välja – 'hinne', 'nimi' ja 'kursus' -, mis toimivad kasvavate indeksiväljadena kogu 'kandidaatide' jaoks. Järgmisena kutsume välja unikaalseks muutmiseks suvandit „ainulaadne”, kuna sellele valikule on määratud „tõene”.

Väljund kuvab tulemused, mis näitavad, et kõik kolm välja on nüüd määratud kogumi kordumatu indeks:

Näide 4: looge kordumatu kordumatu välja väärtuste indeks

Nüüd proovime luua kordumatu indeksi kordumatu välja väärtuse jaoks, mis käivitab unikaalsuspiirangu säilitamiseks vea.

db.candidates.createIndex({nimi: 1 },{unikaalne:true})

Siin rakendame sarnaseid väärtusi sisaldava välja jaoks ainulaadseid indeksi kriteeriume. Meetodi createIndex() sees kutsume välja 'name' väärtusega '1', et muuta see kordumatuks indeksiks ja määratleda kordumatu suvand 'true' väärtusega. Kuna kahel dokumendil on identsete väärtustega väli 'nimi', ei saa me muuta seda välja 'kandidaatide' kogu ainulaadseks registriks. Duplikaatvõtme viga käivitatakse päringu täitmisel.

Nagu oodatud, genereerib väljund tulemused, kuna nimeväljal on kahe erineva dokumendi jaoks samad väärtused:

Seega värskendame kollektsiooni “kandidaadid”, andes dokumendi igale “name” väljale kordumatu väärtuse ja loome seejärel unikaalse registrina välja “name”. Selle päringu täitmine loob üldiselt unikaalse indeksina välja „nimi”, nagu on näidatud järgmises:

Näide 5: Looge puuduvale väljale kordumatu indeks

Teise võimalusena rakendame meetodit createIndex() väljal, mida üheski kogu dokumendis pole. Selle tulemusena salvestab indeks sellele väljale nullväärtuse ja toiming nurjub välja väärtuse rikkumise tõttu.

db.candidates.createIndex( { email: 1 }, { unikaalne: tõsi } )

Siin kasutame meetodit createIndex(), kus väljale 'e-post' antakse väärtus '1'. Välja 'e-post' pole kogus 'Kandidaadid' olemas ja me püüame muuta selle kogu 'kandidaatide' jaoks ainulaadseks registriks, määrates unikaalseks valikuks 'tõene'.

Selle päringu täitmisel kuvatakse väljundis tõrketeade, kuna kogus 'kandidaadid' puudub väli 'e-post':

Näide 6: looge välja kordumatu indeks hõreda valikuga

Järgmisena saab unikaalse indeksi luua ka harva valikuga. Hõreda indeksi funktsionaalsus seisneb selles, et see hõlmab ainult dokumente, millel on indekseeritud väli, välja arvatud dokumendid, millel pole indekseeritud välja. Hõreda valiku seadistamiseks esitasime järgmise struktuuri:

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

{ nimi: 'unique_sparse_course_index' , kordumatu: õige, hõre: tõene } )

Siin pakume meetodit createIndex(), kus väljale 'kursus' määratakse väärtus '1'. Pärast seda määrame lisavõimaluse unikaalse indeksivälja määramiseks, milleks on “kursus”. Valikud hõlmavad nimetust, mis määrab indeksi „unique_sparse_course_index”. Seejärel on meil suvand 'unikaalne', mis on määratud väärtusega 'tõene' ja suvand 'hõre' on samuti seatud väärtusele 'tõene'.

Väljund loob unikaalse ja hõreda indeksi väljale 'kursus', nagu on näidatud järgmiselt:

Näide 7: Kuvage loodud kordumatu indeks, kasutades meetodit GetIndexes()

Eelmises näites loodi antud kogu jaoks ainult kordumatu register. Kollektsiooni 'kandidaatide' ainulaadsete indeksite vaatamiseks ja teabe hankimiseks kasutame järgmist getIndexes() meetodit.

db.candidates.getIndexes();

Siin kutsume 'kandidaatide' kogus funktsiooni getIndexes(). Funktsioon getIndexes() tagastab kõik eelmistes näidetes loodud kollektsiooni „kandidaadid” indeksiväljad.

Väljund kuvab ainulaadse indeksi, mille oleme kogu jaoks loonud: kas kordumatu indeks, liitindeks või kordumatu hõre indeks:

Järeldus

Püüdsime luua ainulaadse indeksi kogu konkreetsete väljade jaoks. Uurisime erinevaid viise ühe ja mitme välja jaoks ainulaadse indeksi loomiseks. Samuti proovisime luua kordumatu indeksi, kus toiming ebaõnnestub unikaalse piirangu rikkumise tõttu.