MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak tworzyć indeksy bez rozróżniania wielkości liter w MongoDB?

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.

  1. 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"
    }
    }
    ]
    
  2. 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"
    }
    }
    }
    ]
    
    
  3. 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 } })
    
  4. 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

  5. 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:

  6. 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 Tweet

    Wię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:


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. importowanie JSON do mongoDB za pomocą pymongo

  2. Testowanie jednostkowe z MongoDB

  3. Włączanie kompresji danych w MongoDB 3.0

  4. Jak zaktualizować wartość konkretnego osadzonego dokumentu, wewnątrz tablicy, określonego dokumentu w MongoDB?

  5. Wydaje się, że wyniki MapReduce są ograniczone do 100?