Jak utworzyć indeks MongoDB bez uwzględniania wielkości liter
W tym poście pokażemy, jak tworzyć indeksy bez rozróżniania wielkości liter w MongoDB przy użyciu Collations, nowej funkcji wydanej przez MongoDB w wersji 3.4.
Co to są indeksy bez rozróżniania wielkości liter?
Indeksy bez rozróżniania wielkości liter obsługują zapytania, które dokonują porównywania ciągów znaków bez względu na wielkość liter, a dzięki obsłudze sortowania MongoDB 3.4 można je teraz zbudować. Sortowanie daje możliwość określenia reguł specyficznych dla języka dla porównywania ciągów. Ponieważ poprzednie wersje MongoDB nie obsługiwały sortowania, ograniczono się do porównania indeksów z uwzględnieniem wielkości liter. W scenariuszach, które wymagały zachowania bez uwzględniania wielkości liter, jedyną opcją było przekonwertowanie/zapisanie wszystkich ciągów na wielkie lub małe litery, a następnie wykonanie porównania. Jak możesz sobie wyobrazić, powoduje to wiele problemów z zapytaniami i operacjami indeksowania.
Właściwość sortowania można ustawić na poziomie kolekcji lub jawnie podczas tworzenia indeksu.
-
Ustaw właściwość sortowania na poziomie kolekcji
Jeśli jest ustawiony na poziomie kolekcji, nie trzeba go określać przy każdym poleceniu create-index on, ponieważ indeks dziedziczy sortowanie kolekcji . O ile nie określono wyraźnie w czasie tworzenia, kolekcja nie ma skojarzonego z nią sortowania. Możesz określić szczegóły sortowania swojej kolekcji za pomocą poleceń podanych poniżej:
>db.createCollection("test") >db.getCollectionInfos({name: test'}); [ { "name" : "test", "type" : "collection", "options" : { }, "info" : { "readOnly" : false }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.test" } } ]
-
Ustaw właściwość sortowania podczas tworzenia indeksu
Oto jak możesz wyraźnie określić sortowanie podczas tworzenia kolekcji:
>db.createCollection("test2", { collation: { locale: 'en_US', strength: 2 } } ); >db.getCollectionInfos({name: 'test2'}) [ { "name" : "test2", "type" : "collection", "options" : { "collation" : { "locale" : "en_US", "caseLevel" : false, "caseFirst" : "off", "strength" : 2, "numericOrdering" : false, "alternate" : "non-ignorable", "maxVariable" : "punct", "normalization" : false, "backwards" : false, "version" : "57.1" } }, "info" : { "readOnly" : false }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.test2", "collation" : { "locale" : "en_US", "caseLevel" : false, "caseFirst" : "off", "strength" : 2, "numericOrdering" : false, "alternate" : "non-ignorable", "maxVariable" : "punct", "normalization" : false, "backwards" : false, "version" : "57.1" } } } ]
-
Ustaw właściwość sortowania podczas budowania indeksu
Masz również możliwość jawnego ustawienia sortowania indeksu podczas jego budowania. Na przykład dodanie „indeksu” we właściwości name kolekcji testów z lokalizacją „en” i siłą 2:
>db.test.createIndex( { name: 1}, { collation: { locale: 'en', strength: 2 } })
-
Jak wysyłać zapytania za pomocą sortowania
Właściwość Collation musi być określona w czasie zapytania, aby użyć indeksu utworzonego za pomocą funkcji Collation:
db.test.find({name:'blah'})
Jak wyszukiwać indeksy bez rozróżniania wielkości liter za pomocą funkcji sortowania w MongoDBClick To Tweet
-
Określ sortowanie w zapytaniu
To zapytanie nie użyje indeksu określonego powyżej, ponieważ nie określono sortowania. Aby wykorzystać sortowanie, musimy je wyraźnie określić w zapytaniu:
db.test.find({name:'blah'}).collation({ locale: 'en', strength: 2 })
Nawet jeśli Twoja kolekcja ma domyślne sortowanie, nadal musisz określić sortowanie w zapytaniu. W przeciwnym razie MongoDB nie użyje określonego indeksu:
-
Sortowanie podczas aktualizacji ze starszej wersji MongoDB (3.2.x)
W przypadku uaktualnienia ze starszej wersji MongoDB (np. 3.2.x) istniejące indeksy nie będą obsługiwać sortowania. Pierwszym krokiem do uruchomienia sortowania jest upewnienie się, że wszystkie nowe funkcje wersji 3.4.x są włączone:
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
Uaktualnij wersję #MongoDB, aby tworzyć indeksy bez rozróżniania wielkości liter za pomocą funkcji CollationClick To TweetWięcej informacji o niezgodnościach można znaleźć w informacjach o wersji MongoDB 3.x. Pamiętaj, że po wykonaniu tych kroków trudniej jest wrócić do wersji 3.2. Naszym następnym krokiem jest sprawdzenie wersji Twojego indeksu.
Po zaktualizowaniu zgodności do wersji 3.4 możesz tworzyć nowe indeksy, wykonując czynności opisane wcześniej. Jeśli tworzysz duży indeks, użyj zadania budowania indeksu Rolling ScaleGrid, aby dodać indeksy: