MongoDB - indeksowanie
Indeksy obsługują wydajne rozwiązywanie zapytań. Bez indeksów MongoDB musi skanować każdy dokument w kolekcji, aby wybrać te dokumenty, które pasują do wyrażenia zapytania. To skanowanie jest wysoce nieefektywne i wymaga MongoDB do przetworzenia dużej ilości danych.
Indeksy to specjalne struktury danych, które przechowują niewielką część zestawu danych w łatwej do przejrzenia formie. Indeks przechowuje wartość określonego pola lub zestawu pól uporządkowanych według wartości pola określonej w indeksie.
Metoda createIndex ()
Aby utworzyć indeks, musisz użyć metody createIndex () bazy danych MongoDB.
Składnia
Podstawowa składnia createIndex() metoda jest następująca ().
>db.COLLECTION_NAME.createIndex({KEY:1})
Tutaj klucz jest nazwą pola, dla którego chcesz utworzyć indeks, a 1 oznacza kolejność rosnącą. Aby utworzyć indeks w porządku malejącym, musisz użyć -1.
Przykład
>db.mycol.createIndex({"title":1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
>
W createIndex() metodę można przekazać wiele pól, aby utworzyć indeks na wielu polach.
>db.mycol.createIndex({"title":1,"description":-1})
>
Ta metoda akceptuje również listę opcji (które są opcjonalne). Poniżej znajduje się lista -
Parametr | Rodzaj | Opis |
---|---|---|
tło | Boolean | Tworzy indeks w tle, aby budowanie indeksu nie blokowało innych działań bazy danych. Określ true, aby budować w tle. Wartość domyślna tofalse. |
wyjątkowy | Boolean | Tworzy unikalny indeks, dzięki czemu kolekcja nie będzie akceptować wstawiania dokumentów, w których klucz lub klucze indeksu pasują do istniejącej wartości w indeksie. Określ true, aby utworzyć unikalny indeks. Wartość domyślna tofalse. |
Nazwa | strunowy | Nazwa indeksu. Jeśli nie zostanie określony, MongoDB generuje nazwę indeksu, łącząc nazwy indeksowanych pól i porządek sortowania. |
rzadki | Boolean | Jeśli prawda, indeks odwołuje się tylko do dokumentów z określonym polem. Te indeksy zajmują mniej miejsca, ale zachowują się inaczej w niektórych sytuacjach (szczególnie podczas sortowania). Wartość domyślna tofalse. |
expireAfterSeconds | liczba całkowita | Określa wartość w sekundach jako TTL, aby kontrolować, jak długo MongoDB zachowuje dokumenty w tej kolekcji. |
ciężary | dokument | Waga jest liczbą z zakresu od 1 do 99 999 i określa znaczenie pola w stosunku do innych indeksowanych pól pod względem wyniku. |
domyślny język | strunowy | W przypadku indeksu tekstowego: język, który określa listę słów pomijanych oraz reguły dotyczące stemmera i tokenizera. Wartość domyślna toEnglish. |
language_override | strunowy | W przypadku indeksu tekstowego określ nazwę pola w dokumencie zawierającym język, który ma zastąpić język domyślny. Wartość domyślna to język. |
Metoda dropIndex ()
Możesz usunąć określony indeks za pomocą metody dropIndex () bazy danych MongoDB.
Składnia
Podstawowa składnia metody DropIndex () jest następująca ().
>db.COLLECTION_NAME.dropIndex({KEY:1})
Tutaj klucz jest nazwą pliku, dla którego chcesz utworzyć indeks, a 1 oznacza kolejność rosnącą. Aby utworzyć indeks w porządku malejącym, musisz użyć -1.
Przykład
> db.mycol.dropIndex({"title":1})
{
"ok" : 0,
"errmsg" : "can't find index with key: { title: 1.0 }",
"code" : 27,
"codeName" : "IndexNotFound"
}
Metoda dropIndexes ()
Ta metoda usuwa wiele (określonych) indeksów w kolekcji.
Składnia
Podstawowa składnia metody DropIndexes () jest następująca () -
>db.COLLECTION_NAME.dropIndexes()
Przykład
Załóżmy, że utworzyliśmy 2 indeksy w nazwanej kolekcji mycol, jak pokazano poniżej -
> db.mycol.createIndex({"title":1,"description":-1})
Poniższy przykład usuwa powyższe indeksy mycol -
>db.mycol.dropIndexes({"title":1,"description":-1})
{ "nIndexesWas" : 2, "ok" : 1 }
>
Metoda getIndexes ()
Ta metoda zwraca opis wszystkich indeksów w kolekcji.
Składnia
Poniżej znajduje się podstawowa składnia metody getIndexes () -
db.COLLECTION_NAME.getIndexes()
Przykład
Załóżmy, że utworzyliśmy 2 indeksy w nazwanej kolekcji mycol, jak pokazano poniżej -
> db.mycol.createIndex({"title":1,"description":-1})
Poniższy przykład pobiera wszystkie indeksy w kolekcji mycol -
> db.mycol.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.mycol"
},
{
"v" : 2,
"key" : {
"title" : 1,
"description" : -1
},
"name" : "title_1_description_-1",
"ns" : "test.mycol"
}
]
>