{ název: 'Alexa Bill' , školní známka: 'A' , chod: 'krajta' },
{ název: 'Jane Marks' , školní známka: 'B' , chod: 'Jáva' },
{ název: 'Paul Ken' , školní známka: 'C' , chod: 'C#' },
{ název: 'Emily Jeo' , školní známka: 'D' , chod: 'php' }
]);
Můžeme také vytvořit jedinečné pole indexu, když je kolekce přítomna s některými dokumenty uvnitř. Za tímto účelem vložíme dokument do nové kolekce, což je „kandidáti“, jejichž dotaz na vložení je dán takto:
Příklad 1: Vytvořte jedinečný index jednoho pole
Index můžeme vytvořit pomocí metody createIndex() a toto pole můžeme učinit jedinečným zadáním jedinečné možnosti s booleovským „true“.
db.candidates.createIndex( { stupeň: 1 }, { unique: true } )
Zde iniciujeme metodu createIndex() na kolekci „kandidátů“, abychom vytvořili jedinečný index konkrétního pole. Poté poskytneme pole „známka“ s hodnotou „1“ pro specifikaci indexu. Hodnota „1“ zde představuje vzestupný index kolekce. Dále specifikujeme možnost „unique“ s hodnotou „true“, abychom vynutili jedinečnost pole „grade“.
Výstup představuje, že jedinečný index v poli „známka“ je vytvořen pro kolekci „kandidátů“:
Příklad 2: Vytvořte jedinečný index více než jednoho pole
V předchozím příkladu je vytvořeno pouze jedno pole jako jedinečný index. Ale můžeme také vytvořit dvě pole jako jedinečný index současně pomocí metody createIndex().
db.candidates.createIndex( { stupeň: 1 , chod: 1 }, { unique: true } )
Zde voláme metodu createIndex() na stejné kolekci „kandidátů“. Metodě createIndex() zadáme dvě pole – „grade“ a „course“ – s hodnotou „1“ jako prvním výrazem. Poté nastavíme jedinečnou možnost s hodnotou „true“, abychom vytvořili tato dvě jedinečná pole.
Výstup představuje dva jedinečné indexy, „grade_1“ a „course_1“, pro následující kolekci „kandidátů“:
Příklad 3: Vytvořte složený jedinečný index polí
Můžeme však také vytvořit jedinečný složený index v rámci stejné kolekce současně. Toho dosáhneme pomocí následujícího dotazu:
db.candidates.createIndex( { název: 1 , školní známka: 1 , chod: 1 }, { unique: true }K vytvoření složeného jedinečného indexu pro kolekci „kandidátů“ opět použijeme metodu createIndex(). Tentokrát předáme tři pole – „třída“, „jméno“ a „kurz“ – která fungují jako pole vzestupného indexu pro kolekci „kandidátů“. Dále nazýváme možnost „unikátní“, aby bylo pole jedinečné, protože k této možnosti je přiřazeno „pravda“.
Výstup zobrazí výsledky, které ukazují, že všechna tři pole jsou nyní jedinečným indexem zadané kolekce:
Příklad 4: Vytvořte jedinečný index duplicitních hodnot polí
Nyní se pokusíme vytvořit jedinečný index pro duplicitní hodnotu pole, který spustí chybu, aby se zachovalo omezení jedinečnosti.
db.candidates.createIndex({jméno: 1 },{unique:true})Zde použijeme kritéria jedinečného indexu pro pole, které obsahuje podobné hodnoty. Uvnitř metody createIndex() voláme pole „name“ s hodnotou „1“, abychom z něj udělali jedinečný index a definujeme jedinečnou možnost s hodnotou „true“. Vzhledem k tomu, že tyto dva dokumenty mají pole „name“ s identickými hodnotami, nemůžeme z tohoto pole vytvořit jedinečný index kolekce „kandidátů“. Chyba duplicitního klíče se spustí po provedení dotazu.
Podle očekávání výstup generuje výsledky, protože pole názvu má stejné hodnoty pro dva různé dokumenty:
Aktualizujeme tedy kolekci „kandidátů“ tím, že každému poli „name“ v dokumentu přiřadíme jedinečnou hodnotu a poté vytvoříme pole „name“ jako jedinečný index. Provedením tohoto dotazu se obecně vytvoří pole „name“ jako jedinečný index, jak je znázorněno v následujícím:
Příklad 5: Vytvořte jedinečný index chybějícího pole
Alternativně použijeme metodu createIndex() na pole, které neexistuje v žádném z dokumentů kolekce. Výsledkem je, že index u tohoto pole ukládá hodnotu null a operace se nezdaří kvůli porušení hodnoty pole.
db.candidates.createIndex( { email: 1 }, { unique: true } )Zde používáme metodu createIndex(), kde je pole „e-mail“ opatřeno hodnotou „1“. Pole „e-mail“ v kolekci „kandidátů“ neexistuje a snažíme se z něj udělat jedinečný index pro kolekci „kandidáti“ nastavením jedinečné možnosti na „true“.
Když je dotaz na toto proveden, dostaneme chybu ve výstupu, protože pole „e-mail“ chybí v kolekci „kandidátů“:
Příklad 6: Vytvořte jedinečný index pole s možností Sparse
Dále lze jedinečný index vytvořit také pomocí volby sparse. Funkce řídkého indexu spočívá v tom, že zahrnuje pouze dokumenty, které mají indexované pole, s výjimkou dokumentů, které indexované pole nemají. Pro nastavení řídké možnosti jsme poskytli následující strukturu:
db.candidates.createIndex( { kurz : 1 },{ název: 'unique_sparse_course_index' , jedinečný: true, sparse: true } )
Zde poskytujeme metodu createIndex(), kde je pole „kurz“ nastaveno na hodnotu „1“. Poté specifikujeme další možnost nastavení jedinečného indexového pole, které je „kurz“. Možnosti zahrnují „name“, které nastavuje index „unique_sparse_course_index“. Pak máme možnost „unikátní“, která je specifikována hodnotou „true“ a možnost „sparse“ je také nastavena na „true“.
Výstup vytvoří jedinečný a řídký index v poli „kurz“, jak je znázorněno níže:
Příklad 7: Ukažte vytvořený jedinečný index pomocí metody GetIndexes().
V předchozím příkladu byl pro poskytnutou kolekci vytvořen pouze jedinečný index. K zobrazení a získání informací o jedinečných indexech pro kolekci „kandidátů“ používáme následující metodu getIndexes():
db.candidates.getIndexes();Zde voláme funkci getIndexes() na kolekci „kandidátů“. Funkce getIndexes() vrací všechna pole indexu pro kolekci „kandidátů“, kterou jsme vytvořili v předchozích příkladech.
Výstup zobrazuje jedinečný index, který jsme pro kolekci vytvořili: buď jedinečný index, složený index, nebo jedinečný řídký index:
Závěr
Pokusili jsme se vytvořit jedinečný index pro konkrétní pole kolekce. Prozkoumali jsme různé způsoby, jak vytvořit jedinečný index pro jedno pole a více polí. Také jsme se pokusili vytvořit jedinečný index, kde operace selže kvůli jedinečnému porušení omezení.