Een MongoDB hoofdletterongevoelige index maken
In dit bericht laten we u zien hoe u hoofdletterongevoelige indexen kunt bouwen in MongoDB met behulp van Collations, een nieuwe functie die door MongoDB is uitgebracht in versie 3.4.
Wat zijn hoofdletterongevoelige indexen?
Hoofdlettergevoelige indexen ondersteunen zoekopdrachten die tekenreeksen vergelijken zonder rekening te houden met hoofdletters, en met de ondersteuning van Collation door MongoDB 3.4 is het nu mogelijk om deze te bouwen. Sorteren geeft u de mogelijkheid om taalspecifieke regels op te geven voor het vergelijken van tekenreeksen. Aangezien de vorige versies van MongoDB Collation niet ondersteunden, was u beperkt tot het uitvoeren van een hoofdlettergevoelige indexvergelijking. In de scenario's waarvoor hoofdletterongevoelig gedrag nodig was, was de enige optie om al uw tekenreeksen te converteren/op te slaan naar hoofdletters of kleine letters en vervolgens de vergelijking te maken. Zoals je je kunt voorstellen, veroorzaakt dit veel gedoe met query's en indexbewerkingen.
De eigenschap Collation kan worden ingesteld op collectieniveau of expliciet bij het maken van een index.
-
Stel de sorteereigenschap in op verzamelingsniveau
Als dit op collectieniveau is ingesteld, hoeft dit niet te worden opgegeven bij elke create-index-opdracht, aangezien de index de sortering van de collectie overneemt . Tenzij expliciet aangegeven tijdens de aanmaaktijd, is er geen sortering aan een collectie gekoppeld. U kunt de sorteerdetails van uw collectie bepalen met behulp van onderstaande commando's:
>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" } } ]
-
Stel de sorteereigenschap in bij het maken van een index
Zo kun je expliciet een sortering specificeren bij het maken van een collectie:
>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" } } } ]
-
Stel de sorteereigenschap in tijdens het bouwen van een index
Je hebt ook de mogelijkheid om de sortering expliciet in te stellen voor een index tijdens het bouwen ervan. Bijvoorbeeld door "index" toe te voegen aan de eigenschap name van de testverzameling met locale 'en' en sterkte 2:
>db.test.createIndex( { name: 1}, { collation: { locale: 'en', strength: 2 } })
-
Zoeken met sortering
De eigenschap Collation moet tijdens de query worden opgegeven om de index te gebruiken die is gemaakt met Collation:
db.test.find({name:'blah'})
Hoofdletterongevoelige indexen opvragen met Collation in MongoDBClick To Tweet
-
Specificeer sortering in uw zoekopdracht
Deze zoekopdracht zal de hierboven gespecificeerde index niet gebruiken omdat sortering niet is gespecificeerd. Om gebruik te kunnen maken van de sortering, moeten we deze expliciet specificeren in de query:
db.test.find({name:'blah'}).collation({ locale: 'en', strength: 2 })
Zelfs als uw collectie een standaard sortering heeft, moet u de sortering nog steeds specificeren in uw zoekopdracht. Anders zal MongoDB de specifieke index niet gebruiken:
-
Collatie bij het upgraden van een oudere MongoDB-versie (3.2.x)
Als u een upgrade uitvoert van een oudere versie van MongoDB (bijv. 3.2.x), ondersteunen de bestaande indexen Collation niet. Om Collation aan de gang te krijgen, is je eerste stap ervoor te zorgen dat alle nieuwe functies van 3.4.x zijn ingeschakeld:
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
Upgrade de #MongoDB-versie om hoofdletterongevoelige indexen te maken met behulp van CollationClick To TweetMeer informatie over de incompatibiliteiten vindt u in de release-opmerkingen van MongoDB 3.x. Houd er rekening mee dat als u deze stappen eenmaal hebt uitgevoerd, het moeilijker is om terug te downgraden naar 3.2. Onze volgende stap is om de versie van uw index te controleren.
Als je eenmaal hebt geüpgraded naar 3.4-compatibiliteit, kun je nieuwe indexen maken door de stappen te volgen die we eerder hebben beschreven. Als u een grote index aan het bouwen bent, gebruik dan de ScaleGrid rolling index build job om uw indexen toe te voegen: