Jak vytvořit MongoDB index nerozlišující malá a velká písmena
V tomto příspěvku vám ukážeme, jak vytvořit indexy bez ohledu na velikost písmen v MongoDB pomocí Collations, nové funkce vydané MongoDB ve verzi 3.4.
Co jsou indexy nerozlišující malá a velká písmena?
Indexy nerozlišující malá a velká písmena podporují dotazy, které provádějí porovnávání řetězců bez ohledu na velká a malá písmena, a díky podpoře Collation MongoDB 3.4 je nyní možné sestavit. Porovnání vám dává možnost určit pravidla specifická pro jazyk pro porovnávání řetězců. Vzhledem k tomu, že předchozí verze MongoDB nepodporovaly porovnávání, byli jste omezeni na provádění indexového porovnání s rozlišováním malých a velkých písmen. Ve scénářích, které vyžadovaly chování bez rozlišení malých a velkých písmen, bylo jedinou možností převést/uložit všechny vaše řetězce na velká nebo malá písmena a poté provést porovnání. Jak si dokážete představit, způsobuje to spoustu potíží s dotazy a operacemi indexu.
Vlastnost Collation lze nastavit na úrovni kolekce nebo explicitně při vytváření indexu.
-
Nastavte vlastnost řazení na úrovni kolekce
Pokud je nastaveno na úrovni kolekce, není nutné jej zadávat u každého zapnutého příkazu create-index, protože index zdědí řazení kolekce . Pokud není výslovně uvedeno během vytváření, kolekce s ní nemá spojeno žádné řazení. Podrobnosti o řazení vaší sbírky můžete určit pomocí příkazů uvedených níže:
>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" } } ]
-
Nastavte vlastnost řazení při vytváření indexu
Jak můžete explicitně určit řazení při vytváření kolekce:
>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" } } } ]
-
Nastavte vlastnost řazení při vytváření indexu
Máte také možnost explicitně nastavit řazení pro index při jeho vytváření. Například přidání „index“ do vlastnosti name testovací kolekce s národním prostředím „en“ a silou 2:
>db.test.createIndex( { name: 1}, { collation: { locale: 'en', strength: 2 } })
-
Jak provádět dotazy pomocí řazení
Vlastnost Collation musí být specifikována v době dotazu, aby bylo možné použít index vytvořený pomocí Collation:
db.test.find({name:'blah'})
Jak se dotazovat na indexy bez ohledu na velikost písmen pomocí Collation v MongoDBClick To Tweet
-
Zadejte řazení v dotazu
Tento dotaz nebude používat index zadaný výše, protože nebylo zadáno řazení. Abychom mohli využít řazení, musíme jej v dotazu explicitně specifikovat:
db.test.find({name:'blah'}).collation({ locale: 'en', strength: 2 })
I když má vaše sbírka výchozí řazení, musíte ve svém dotazu určit řazení. Jinak MongoDB nepoužije konkrétní index:
-
Řazení při upgradu ze starší verze MongoDB (3.2.x)
Pokud upgradujete ze starší verze MongoDB (např. 3.2.x), stávající indexy nebudou podporovat řazení. Chcete-li spustit Collation, musíte se nejprve ujistit, že jsou zapnuty všechny nové funkce verze 3.4.x:
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
Upgradujte verzi #MongoDB a vytvořte indexy nerozlišující malá a velká písmena pomocí CollationClick To TweetDalší informace o nekompatibilitě jsou uvedeny v poznámkách k vydání MongoDB 3.x. Vezměte prosím na vědomí, že jakmile provedete tyto kroky, je obtížnější přejít zpět na 3.2. Naším dalším krokem je zkontrolovat verzi vašeho indexu.
Jakmile upgradujete na kompatibilitu 3.4, můžete vytvořit nové indexy podle kroků, které jsme nastínili dříve. Pokud vytváříte velký index, použijte k přidání indexů úlohu sestavení rolovacího indexu ScaleGrid: