Hur man skapar ett MongoDB skiftlägeskänsligt index
I det här inlägget visar vi dig hur du bygger skiftlägesokänsliga index i MongoDB med hjälp av Collations, en ny funktion som släppts av MongoDB i version 3.4.
Vad är skiftlägesokänsliga index?
Verkskiftsokänsliga index stöder frågor som utför strängjämförelser utan hänsyn till skiftlägen, och med MongoDB 3.4:s stöd för Collation är dessa nu möjliga att bygga. Sortering ger dig möjlighet att ange språkspecifika regler för strängjämförelse. Eftersom MongoDB:s tidigare versioner inte stödde Collation, var du begränsad till att utföra en skiftlägeskänslig indexjämförelse. I de scenarier som behövde skiftlägesokänsligt beteende var det enda alternativet att konvertera/lagra alla dina strängar till antingen versaler eller gemener och sedan göra jämförelsen. Som du kan föreställa dig orsakar detta mycket krångel med frågor och indexoperationer.
Sorteringsegenskapen kan ställas in på samlingsnivå eller uttryckligen när du skapar ett index.
-
Ställ in sorteringsegenskapen på samlingsnivå
Om den är inställd på samlingsnivå behöver den inte specificeras med varje create-index-kommando på eftersom indexet ärver samlingen av samlingen . Om det inte uttryckligen anges under skapandet, har en samling ingen sortering kopplad till sig. Du kan fastställa sorteringsdetaljerna för din samling med hjälp av kommandon nedan:
>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" } } ]
-
Ställ in sorteringsegenskapen när du skapar ett index
Så här kan du uttryckligen ange en sortering när du skapar en samling:
>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" } } } ]
-
Ställ in sorteringsegenskapen medan du bygger ett index
Du har också möjlighet att explicit ställa in sorteringen för ett index medan du bygger det. Till exempel, lägga till "index" på namnegenskapen för testsamlingen med locale 'en' och styrka 2:
>db.test.createIndex( { name: 1}, { collation: { locale: 'en', strength: 2 } })
-
Så här frågar du med sortering
Sorteringsegenskapen måste anges vid frågetillfället för att kunna använda indexet byggt med Collation:
db.test.find({name:'blah'})
Hur man frågar skiftlägesokänsliga index med sortering i MongoDBClick To Tweet
-
Ange sortering i din fråga
Den här frågan kommer inte att använda indexet som anges ovan eftersom sortering inte angavs. För att kunna utnyttja sorteringen måste vi specificera den uttryckligen i frågan:
db.test.find({name:'blah'}).collation({ locale: 'en', strength: 2 })
Även om din samling har en standardsortering måste du fortfarande ange sorteringen i din fråga. Annars kommer MongoDB inte att använda det specifika indexet:
-
Sammanställning vid uppgradering från en äldre MongoDB-version (3.2.x)
Om du uppgraderar från en äldre version av MongoDB (t.ex. 3.2.x) kommer de befintliga indexen inte att stödja sortering. För att få igång sortering är ditt första steg att se till att alla nya funktioner i 3.4.x är aktiverade:
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
Uppgradera #MongoDB-versionen för att skapa skiftlägesokänsliga index med CollationClick To TweetMer information om inkompatibiliteterna finns i MongoDB 3.x versionskommentarer. Observera att när du har gjort dessa steg är det svårare att nedgradera tillbaka till 3.2. Vårt nästa steg är att kontrollera versionen av ditt index.
När du har uppgraderat till 3.4-kompatibilitet kan du skapa nya index genom att följa stegen vi beskrev tidigare. Om du bygger ett stort index, använd ScaleGrid rolling index build-jobbet för att lägga till dina index: