Kuinka luoda ainutlaatuinen indeksi MongoDB: ssä

Kuinka Luoda Ainutlaatuinen Indeksi Mongodb Ssa



MongoDB:ssä yksilöllinen indeksi varmistaa, että jokainen arvo tietyssä kentässä tai kenttäryhmässä kokoelman sisällä on ainutlaatuinen. CreateIndex()-menetelmällä voimme tehdä yksilöllisen indeksikentän tietylle kokoelmalle. Ainutlaatuiset indeksit ovat hyödyllisiä tietojen eheyden säilyttämiseksi ja päällekkäisten merkintöjen välttämiseksi tärkeissä kentissä. Artikkeli käsitteli tapoja luoda yksilöllinen hakemisto tietylle kokoelmalle. db.candidates.insertMany([

{ nimi: 'Alexa Bill' , arvosana: 'A' , kurssi: 'python' },

{ nimi: 'Jane Marks' , arvosana: 'B' , kurssi: 'java' },

{ nimi: 'Paul Ken' , arvosana: 'C' , kurssi: 'C#' },

{ nimi: 'Emily Jeo' , arvosana: 'D' , kurssi: 'php' }

]);

Voimme myös luoda yksilöllisen hakemistokentän, kun kokoelma on läsnä ja sen sisällä on dokumentteja. Tätä varten lisäämme asiakirjan uuteen kokoelmaan, joka on 'ehdokkaat', joiden lisäyskysely annetaan seuraavasti:







Esimerkki 1: Luo yksilöllinen indeksi yhdestä kentästä

Voimme luoda indeksin käyttämällä createIndex()-menetelmää ja voimme tehdä tästä kentästä ainutlaatuisen määrittämällä ainutlaatuisen vaihtoehdon Boolen 'true'.



db.candidates.createIndex( { arvosana: 1 }, { ainutlaatuinen: tosi } )

Tässä käynnistämme createIndex()-menetelmän 'kandidaatit'-kokoelmassa luodaksemme yksilöllisen indeksin tietystä kentästä. Tämän jälkeen annamme 'luokka'-kenttään arvon '1' indeksimäärityksiä varten. Arvo '1' edustaa tässä kokoelman nousevaa indeksiä. Seuraavaksi määritämme 'ainutlaatuisen' vaihtoehdon 'true'-arvon kanssa pakottaaksemme kentän 'arvosana' ainutlaatuisuuden.



Tulos osoittaa, että yksilöllinen indeksi 'arvosana'-kenttään luodaan 'ehdokkaiden' kokoelmalle:





Esimerkki 2: Luo ainutlaatuinen indeksi useammasta kuin yhdestä kentästä

Edellisessä esimerkissä vain yksi kenttä luodaan yksilöllisenä hakemistona. Mutta voimme myös luoda kaksi kenttää yksilöllisenä indeksinä samanaikaisesti käyttämällä createIndex()-menetelmää.



db.candidates.createIndex( { arvosana: 1 , kurssi: 1 }, { ainutlaatuinen: tosi } )

Tässä kutsumme createIndex()-menetelmää samassa 'kandidaatti'-kokoelmassa. Määritämme createIndex()-metodille kaksi kenttää - 'grade' ja 'course' - arvolla '1' ensimmäisenä lausekkeena. Sitten asetamme yksilöllisen vaihtoehdon 'true'-arvolla luodaksemme nämä kaksi yksilöllistä kenttää.

Tulos edustaa kahta yksilöllistä indeksiä, 'grade_1' ja 'course_1', seuraavalle 'kandidaatti'-kokoelmalle:

Esimerkki 3: Luo yksilöllinen yhdistetyn kenttien indeksi

Voimme kuitenkin myös luoda ainutlaatuisen yhdistelmäindeksin samaan kokoelmaan samanaikaisesti. Saavutamme tämän seuraavan kyselyn avulla:

db.candidates.createIndex( { nimi: 1 , arvosana: 1 , kurssi: 1 }, { ainutlaatuinen: tosi }

Käytämme createIndex()-menetelmää uudelleen luodaksemme yksilöllisen yhdistetyn indeksin 'kandidaatit'-kokoelmalle. Tällä kertaa ohitamme kolme kenttää - 'arvosana', 'nimi' ja 'kurssi', jotka toimivat nousevina indeksikenttinä 'ehdokkaiden' kokoelmalle. Seuraavaksi kutsumme 'ainutlaatuista' -vaihtoehtoa tehdäksemme kentästä ainutlaatuisen, koska 'true' on määritetty tätä vaihtoehtoa vastaan.

Tulos näyttää tulokset, jotka osoittavat, että kaikki kolme kenttää ovat nyt määritetyn kokoelman yksilöllinen indeksi:

Esimerkki 4: Luo yksilöllinen hakemisto päällekkäisistä kenttäarvoista

Nyt yritämme tehdä yksilöllisen indeksin kentän kaksoisarvolle, joka laukaisee virheen ainutlaatuisuusrajoituksen ylläpitämiseksi.

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

Tässä sovelletaan yksilöllisiä indeksiehtoja kenttään, joka sisältää samanlaisia ​​arvoja. CreateIndex()-metodin sisällä kutsumme 'name'-kenttää arvolla '1', jotta se olisi ainutlaatuinen indeksi ja määrittelee yksilöllisen vaihtoehdon 'true'-arvolla. Koska molemmissa dokumenteissa on 'nimi'-kenttä, jolla on samat arvot, emme voi tehdä tästä kentästä yksilöllistä 'ehdokkaiden' kokoelman hakemistoa. Kaksoisavaimen virhe laukeaa kyselyn suorittamisen yhteydessä.

Kuten odotettiin, tulos luo tulokset, koska nimikentässä on samat arvot kahdelle eri asiakirjalle:

Siten päivitämme 'ehdokkaat'-kokoelman antamalla yksilöllisen arvon asiakirjan jokaiselle 'nimi'-kentälle ja luomme sitten 'nimi'-kentän yksilöiväksi hakemistoksi. Kyselyn suorittaminen luo yleensä 'nimi'-kentän yksilöllisenä hakemistona, kuten seuraavassa esitetään:

Esimerkki 5: Luo yksilöllinen indeksi puuttuvasta kentästä

Vaihtoehtoisesti käytämme createIndex()-menetelmää kenttään, jota ei ole missään kokoelman dokumentissa. Seurauksena on, että indeksi tallentaa nolla-arvon kyseiseen kenttään, ja toiminto epäonnistuu kentän arvon rikkomisen vuoksi.

db.candidates.createIndex( { sähköposti: 1 }, { ainutlaatuinen: tosi } )

Tässä käytämme createIndex()-menetelmää, jossa 'email'-kenttään annetaan arvo '1'. 'Email'-kenttää ei ole 'ehdokkaiden' kokoelmassa, ja yritämme tehdä siitä ainutlaatuisen indeksin 'ehdokkaat'-kokoelmalle asettamalla yksilöllisen vaihtoehdon arvoon 'tosi'.

Kun tätä koskeva kysely suoritetaan, saamme virheilmoituksen, koska 'email'-kenttä puuttuu 'kandidaatit'-kokoelmasta:

Esimerkki 6: Luo yksilöllinen hakemisto kenttään harvalla vaihtoehdolla

Seuraavaksi yksilöllinen indeksi voidaan luoda myös harvalla valinnalla. Harvan indeksin toiminnallisuus on, että se sisältää vain asiakirjat, joissa on indeksoitu kenttä, pois lukien asiakirjat, joissa ei ole indeksoitua kenttää. Annoimme seuraavan rakenteen harvan vaihtoehdon määrittämiseksi:

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

{ nimi: 'unique_sparse_course_index' , ainutlaatuinen: tosi, harva: tosi } )

Tässä tarjoamme createIndex()-menetelmän, jossa 'kurssi'-kenttään asetetaan arvo '1'. Tämän jälkeen määritämme lisävaihtoehdon yksilöllisen indeksikentän määrittämiseksi, joka on 'kurssi'. Vaihtoehdot sisältävät 'name', joka asettaa 'unique_sparse_course_index' -indeksin. Sitten meillä on 'ainutlaatuinen' -vaihtoehto, joka on määritetty 'true'-arvolla, ja 'harva'-vaihtoehto on myös asetettu arvoon 'true'.

Tulos luo ainutlaatuisen ja harvalukuisen indeksin 'kurssi'-kenttään seuraavan kuvan mukaisesti:

Esimerkki 7: Näytä luotu yksilöllinen indeksi GetIndexes()-menetelmällä

Edellisessä esimerkissä tarjotulle kokoelmalle luotiin vain yksilöllinen hakemisto. Käytämme seuraavaa getIndexes() -menetelmää tarkastellaksemme ja saadaksemme tietoja 'ehdokkaiden' kokoelman yksilöllisistä indekseistä:

db.candidates.getIndexes();

Tässä kutsumme getIndexes()-funktiota 'kandidaatit'-kokoelmassa. GetIndexes()-funktio palauttaa kaikki aiemmissa esimerkeissä luomamme 'kandidaatit'-kokoelman indeksikentät.

Tulos näyttää yksilöllisen indeksin, jonka loimme kokoelmalle: joko yksilöllinen indeksi, yhdistelmäindeksi tai ainutlaatuinen harvalukuinen indeksi:

Johtopäätös

Yritimme luoda ainutlaatuisen indeksin kokoelman tietyille kentille. Tutkimme erilaisia ​​tapoja luoda yksilöllinen hakemisto yhdelle ja useille kentille. Yritimme myös luoda ainutlaatuisen indeksin, jossa toiminto epäonnistuu ainutlaatuisen rajoitteen rikkomisen vuoksi.