Ako vytvoriť jedinečný index v MongoDB

Ako Vytvorit Jedinecny Index V Mongodb



V MongoDB jedinečný index zaisťuje, že každá hodnota v konkrétnom poli alebo skupine polí v kolekcii je jedinečná. Pomocou metódy createIndex() môžeme vytvoriť jedinečné pole indexu pre konkrétnu kolekciu. Na účely zachovania integrity údajov a zabránenia duplicitným záznamom v dôležitých poliach sú užitočné jedinečné indexy. Článok sa zaoberal spôsobmi vytvorenia jedinečného indexu pre konkrétnu kolekciu. db.candidates.insertMany([

{ názov: 'Alexa Bill' , známka: 'A' , kurz: 'python' },

{ názov: 'Jane Marks' , známka: 'B' , kurz: 'java' },

{ názov: 'Paul Ken' , známka: 'C' , kurz: 'C#' },

{ názov: 'Emily Jeo' , známka: 'D' , kurz: 'php' }

]);

Môžeme tiež vytvoriť jedinečné pole indexu, keď sa v kolekcii nachádzajú nejaké dokumenty. Na tento účel vložíme dokument do novej kolekcie, ktorá je „kandidátmi“, ktorých dopyt na vloženie je uvedený takto:







Príklad 1: Vytvorte jedinečný index jedného poľa

Index môžeme vytvoriť pomocou metódy createIndex() a toto pole môžeme urobiť jedinečným zadaním jedinečnej možnosti s boolovskou hodnotou „true“.



db.candidates.createIndex( { známka: 1 }, { unique: true } )

Tu spustíme metódu createIndex() na kolekcii „kandidátov“, aby sme vytvorili jedinečný index špecifického poľa. Potom do poľa „známka“ poskytneme hodnotu „1“ pre špecifikáciu indexu. Hodnota „1“ tu predstavuje vzostupný index kolekcie. Ďalej špecifikujeme možnosť „unique“ s hodnotou „true“, aby sme vynútili jedinečnosť poľa „grade“.



Výstup predstavuje, že jedinečný index v poli „známka“ je vytvorený pre kolekciu „kandidátov“:





Príklad 2: Vytvorte jedinečný index viac ako jedného poľa

V predchádzajúcom príklade sa ako jedinečný index vytvorí iba jedno pole. Ale môžeme tiež vytvoriť dve polia ako jedinečný index súčasne pomocou metódy createIndex().



db.candidates.createIndex( { známka: 1 , kurz: 1 }, { unique: true } )

Tu zavoláme metódu createIndex() na rovnakej kolekcii „kandidátov“. Metóde createIndex() špecifikujeme dve polia – „grade“ a „course“ – s hodnotou „1“ ako prvým výrazom. Potom nastavíme jedinečnú možnosť s hodnotou „true“, aby sme vytvorili tieto dve jedinečné polia.

Výstup predstavuje dva jedinečné indexy „grade_1“ a „course_1“ pre nasledujúcu kolekciu „kandidátov“:

Príklad 3: Vytvorte zložený jedinečný index polí

V rámci tej istej kolekcie však môžeme súčasne vytvoriť aj jedinečný zložený index. Dosiahneme to pomocou nasledujúceho dotazu:

db.candidates.createIndex( { názov: 1 , známka: 1 , kurz: 1 }, { unique: true }

Na vytvorenie zloženého jedinečného indexu pre kolekciu „kandidátov“ opäť použijeme metódu createIndex(). Tentokrát prejdeme cez tri polia – „trieda“, „meno“ a „kurz“ – ktoré fungujú ako polia vzostupného indexu pre kolekciu „kandidátov“. Ďalej nazývame možnosť „jedinečné“, aby bolo pole jedinečné, pretože k tejto možnosti je priradené „pravda“.

Výstup zobrazuje výsledky, ktoré ukazujú, že všetky tri polia sú teraz jedinečným indexom zadanej kolekcie:

Príklad 4: Vytvorte jedinečný index duplicitných hodnôt polí

Teraz sa pokúsime vytvoriť jedinečný index pre duplicitnú hodnotu poľa, ktorý spustí chybu, aby sa zachovalo obmedzenie jedinečnosti.

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

Tu použijeme jedinečné kritériá indexu pre pole, ktoré obsahuje podobné hodnoty. V rámci metódy createIndex() voláme pole „name“ s hodnotou „1“, aby sme z neho urobili jedinečný index a definovali jedinečnú možnosť s hodnotou „true“. Keďže tieto dva dokumenty majú pole „meno“ s rovnakými hodnotami, nemôžeme z tohto poľa urobiť jedinečný index kolekcie „kandidátov“. Chyba duplicitného kľúča sa spustí pri vykonaní dotazu.

Ako sa očakávalo, výstup generuje výsledky, pretože pole názvu má rovnaké hodnoty pre dva rôzne dokumenty:

Preto aktualizujeme kolekciu „kandidátov“ tak, že každému poľu „name“ v dokumente pridelíme jedinečnú hodnotu a potom vytvoríme pole „name“ ako jedinečný index. Vykonaním tohto dotazu sa vo všeobecnosti vytvorí pole „name“ ako jedinečný index, ako je znázornené v nasledujúcom texte:

Príklad 5: Vytvorte jedinečný index chýbajúceho poľa

Prípadne použijeme metódu createIndex() na pole, ktoré neexistuje v žiadnom z dokumentov kolekcie. Výsledkom je, že index uloží nulovú hodnotu voči tomuto poľu a operácia zlyhá z dôvodu porušenia hodnoty poľa.

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

Tu používame metódu createIndex(), kde pole „e-mail“ obsahuje hodnotu „1“. Pole „e-mail“ v ​​kolekcii „kandidátov“ neexistuje a snažíme sa z neho urobiť jedinečný index pre kolekciu „kandidátov“ nastavením jedinečnej možnosti na „pravda“.

Po vykonaní tohto dopytu sa vo výstupe zobrazí chyba, pretože v kolekcii kandidátov chýba pole „e-mail“:

Príklad 6: Vytvorenie jedinečného indexu poľa s možnosťou Sparse

Ďalej môže byť jedinečný index vytvorený aj s možnosťou rozptýlenia. Funkcionalita riedkeho indexu spočíva v tom, že zahŕňa iba dokumenty, ktoré majú indexované pole, s výnimkou dokumentov, ktoré indexované pole nemajú. Na nastavenie riedkej možnosti sme poskytli nasledujúcu štruktúru:

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

{ názov: 'unique_sparse_course_index' , jedinečný: pravdivý, riedky: pravdivý } )

Tu poskytujeme metódu createIndex(), kde je pole „kurz“ nastavené na hodnotu „1“. Potom špecifikujeme ďalšiu možnosť nastavenia jedinečného indexového poľa, ktorým je „kurz“. Možnosti zahŕňajú „name“, ktorý nastavuje index „unique_sparse_course_index“. Potom máme možnosť „unique“, ktorá je špecifikovaná hodnotou „true“ a možnosť „sparse“ je tiež nastavená na hodnotu „true“.

Výstup vytvorí jedinečný a riedky index v poli „kurz“, ako je uvedené nižšie:

Príklad 7: Ukážte vytvorený jedinečný index pomocou metódy GetIndexes().

V predchádzajúcom príklade bol pre poskytnutú kolekciu vytvorený iba jedinečný index. Na zobrazenie a získanie informácií o jedinečných indexoch pre kolekciu „kandidátov“ používame nasledujúcu metódu getIndexes():

db.candidates.getIndexes();

Tu voláme funkciu getIndexes() na kolekcii „kandidátov“. Funkcia getIndexes() vracia všetky polia indexu pre kolekciu „kandidátov“, ktorú sme vytvorili v predchádzajúcich príkladoch.

Výstup zobrazuje jedinečný index, ktorý sme vytvorili pre kolekciu: buď jedinečný index, zložený index, alebo jedinečný riedky index:

Záver

Pokúsili sme sa vytvoriť jedinečný index pre špecifické polia kolekcie. Preskúmali sme rôzne spôsoby vytvorenia jedinečného indexu pre jedno pole a viaceré polia. Pokúsili sme sa tiež vytvoriť jedinečný index, kde operácia zlyhá v dôsledku jedinečného porušenia obmedzenia.