Jak utworzyć unikalny indeks w MongoDB

Jak Utworzyc Unikalny Indeks W Mongodb



W MongoDB unikalny indeks zapewnia, że ​​każda wartość w określonym polu lub grupie pól w kolekcji jest unikalna. Za pomocą metody createIndex() możemy utworzyć unikalne pole indeksowe dla konkretnej kolekcji. W celu zachowania integralności danych i uniknięcia dublowania wpisów w istotnych polach pomocne są unikalne indeksy. W artykule omówiono sposoby tworzenia unikalnego indeksu dla konkretnego zbioru. db.candidates.insertMany([

{ nazwa: „Rachunek Alexy” , stopień: 'A' , kurs: 'pyton' },

{ nazwa: „Jane Marks” , stopień: 'B' , kurs: 'Jawa' },

{ nazwa: „Paul Ken” , stopień: 'C' , kurs: 'C#' },

{ nazwa: „Emilia Jeo” , stopień: 'D' , kurs: „php” }

]);

Możemy także utworzyć unikalne pole indeksowe, gdy w kolekcji znajdują się jakieś dokumenty. W tym celu do nowego zbioru wprowadzamy dokument będący „kandydatami”, których zapytanie o wstawienie podano w następujący sposób:







Przykład 1: Utwórz unikalny indeks pojedynczego pola

Indeks możemy utworzyć za pomocą metody createIndex() i możemy uczynić to pole unikalnym, określając opcję unikalną za pomocą wartości logicznej „true”.



db.candidates.createIndex( { ocena: 1 }, {unikalny: prawda } )

Tutaj inicjujemy metodę createIndex() w kolekcji „kandydaci”, aby utworzyć unikalny indeks określonego pola. Następnie w polu „ocena” podajemy wartość „1” dla specyfikacji indeksu. Wartość „1” reprezentuje rosnący indeks kolekcji. Następnie podajemy opcję „unique” z wartością „true”, aby wymusić unikalność pola „grade”.



Dane wyjściowe wskazują, że dla kolekcji „kandydaci” tworzony jest unikalny indeks w polu „ocena”:





Przykład 2: Utwórz unikalny indeks więcej niż jednego pola

W poprzednim przykładzie tylko jedno pole zostało utworzone jako unikalny indeks. Możemy jednak jednocześnie utworzyć dwa pola jako unikalny indeks, korzystając z metody createIndex().



db.candidates.createIndex( { ocena: 1 , kurs: 1 }, {unikalny: prawda } )

Tutaj wywołujemy metodę createIndex() w tej samej kolekcji „kandydatów”. Do metody createIndex() podajemy dwa pola – „grade” i „course” – z wartością „1” jako pierwszym wyrażeniem. Następnie ustawiamy opcję unikalną na wartość „true”, aby utworzyć te dwa unikalne pola.

Dane wyjściowe reprezentują dwa unikalne indeksy „ocena_1” i „kurs_1” dla następującej kolekcji „kandydatów”:

Przykład 3: Utwórz złożony unikalny indeks pól

Możemy jednak jednocześnie utworzyć unikalny indeks złożony w tej samej kolekcji. Osiągamy to poprzez następujące zapytanie:

db.candidates.createIndex( {nazwa: 1 , stopień: 1 , kurs: 1 }, { unikalny: prawda }

Ponownie używamy metody createIndex() w celu utworzenia złożonego unikalnego indeksu dla kolekcji „kandydaci”. Tym razem przekazujemy trzy pola – „ocena”, „nazwisko” i „kurs” – które pełnią rolę rosnących pól indeksu dla kolekcji „kandydaci”. Następnie wywołujemy opcję „unikalną”, aby pole było unikalne, ponieważ do tej opcji przypisano wartość „true”.

Dane wyjściowe wyświetlają wyniki, które pokazują, że wszystkie trzy pola są teraz unikalnym indeksem określonej kolekcji:

Przykład 4: Utwórz unikalny indeks zduplikowanych wartości pól

Teraz próbujemy utworzyć unikalny indeks dla zduplikowanej wartości pola, co powoduje błąd w celu utrzymania ograniczenia unikalności.

db.candidates.createIndex({nazwa: 1 },{unikalny:true})

Tutaj stosujemy unikalne kryteria indeksowania dla pola zawierającego podobne wartości. Wewnątrz metody createIndex() wywołujemy pole „name” o wartości „1”, aby uczynić go unikalnym indeksem i definiujemy unikalną opcję o wartości „true”. Ponieważ w obu dokumentach pole „nazwa” ma identyczne wartości, nie możemy uczynić tego pola unikalnym indeksem kolekcji „kandydaci”. Błąd zduplikowanego klucza jest wyzwalany po wykonaniu zapytania.

Zgodnie z oczekiwaniami dane wyjściowe generują wyniki, ponieważ pole nazwy ma te same wartości dla dwóch różnych dokumentów:

W związku z tym aktualizujemy kolekcję „kandydaci”, nadając unikalną wartość każdemu polu „nazwa” w dokumencie, a następnie tworzymy pole „nazwa” jako unikalny indeks. Wykonanie tego zapytania zazwyczaj powoduje utworzenie pola „nazwa” jako unikalnego indeksu, jak pokazano poniżej:

Przykład 5: Utwórz unikalny indeks brakującego pola

Alternatywnie stosujemy metodę createIndex() na polu, które nie występuje w żadnym dokumencie kolekcji. W rezultacie indeks przechowuje wartość null w tym polu, a operacja kończy się niepowodzeniem z powodu naruszenia wartości pola.

db.candidates.createIndex( { e-mail: 1 }, {unikalny: prawda } )

Wykorzystujemy tutaj metodę createIndex(), w której pole „email” otrzymuje wartość „1”. Pole „e-mail” nie istnieje w kolekcji „kandydaci” i staramy się, aby było to unikalny indeks dla kolekcji „kandydaci”, ustawiając opcję unikalną na „true”.

Po wykonaniu zapytania w tym przypadku pojawia się błąd w wynikach, ponieważ w kolekcji „kandydaci” brakuje pola „e-mail”:

Przykład 6: Utwórz unikalny indeks pola z opcją rzadką

Następnie można utworzyć unikalny indeks również za pomocą opcji sparse. Funkcjonalność indeksu rzadkiego polega na tym, że obejmuje on tylko dokumenty posiadające pole indeksowane, z wyłączeniem dokumentów, które nie mają pola indeksowanego. Aby skonfigurować opcję rzadką, udostępniliśmy następującą strukturę:

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

{ nazwa: „unikalny_rzadki_indeks_kursu” , unikalny: prawdziwy, rzadki: prawdziwy } )

Tutaj udostępniamy metodę createIndex(), w której pole „kurs” ma ustawioną wartość „1”. Następnie określamy dodatkową opcję ustawienia unikalnego pola indeksowego jakim jest „kurs”. Opcje obejmują „nazwę”, która ustawia indeks „unikalny_rzadki_indeks_kursu”. Następnie mamy opcję „unikalną”, która jest określona wartością „true”, a opcja „rzadka” również jest ustawiona na „true”.

Dane wyjściowe tworzą unikalny i rzadki indeks w polu „kurs”, jak pokazano poniżej:

Przykład 7: Pokaż utworzony unikalny indeks za pomocą metody GetIndexes().

W poprzednim przykładzie dla podanej kolekcji utworzono jedynie unikalny indeks. Aby wyświetlić i uzyskać informacje o unikalnych indeksach kolekcji „kandydaci”, używamy następującej metody getIndexes():

db.candidates.getIndexes();

Tutaj wywołujemy funkcję getIndexes() w kolekcji „kandydaci”. Funkcja getIndexes() zwraca wszystkie pola indeksowe dla kolekcji „kandydaci”, którą utworzyliśmy w poprzednich przykładach.

Dane wyjściowe wyświetlają unikalny indeks, który utworzyliśmy dla kolekcji: indeks unikalny, indeks złożony lub unikalny indeks rzadki:

Wniosek

Próbowaliśmy stworzyć unikalny indeks dla konkretnych pól kolekcji. Zbadaliśmy różne sposoby tworzenia unikalnego indeksu dla jednego pola i wielu pól. Próbowaliśmy również utworzyć unikalny indeks w przypadku, gdy operacja kończy się niepowodzeniem z powodu naruszenia ograniczenia unikalnego.