Sådan opretter du et MongoDB store og små bogstaver indeks
I dette indlæg viser vi dig, hvordan du opbygger store og små bogstaver i MongoDB ved hjælp af Collations, en ny funktion frigivet af MongoDB i version 3.4.
Hvad er indekser uden store og små bogstaver?
Indekser, der ikke er følsomme over for store og små bogstaver, understøtter forespørgsler, der udfører strengsammenligninger uden hensyn til bogstaver , og med MongoDB 3.4's understøttelse af Collation er disse nu mulige at bygge. Sortering giver dig mulighed for at angive sprogspecifikke regler for strengsammenligning. Da MongoDBs tidligere versioner ikke understøttede Collation, var du begrænset til at udføre en case-sensitive indeks sammenligning. I de scenarier, der krævede forskel på store og små bogstaver, var den eneste mulighed at konvertere/gemme alle dine strenge til enten store eller små bogstaver og derefter foretage sammenligningen. Som du kan forestille dig, forårsager dette en masse besvær med forespørgsler og indeksoperationer.
Sorteringsegenskaben kan indstilles på samlingsniveau eller eksplicit, når der oprettes et indeks.
-
Indstil sorteringsegenskaben på samlingsniveau
Hvis indstillet på samlingsniveau, behøver det ikke at angives med hver create-index-kommando aktiveret, da indekset arver samlingen af samlingen . Medmindre det udtrykkeligt er angivet under oprettelsestiden, har en samling ingen sortering knyttet til sig. Du kan bestemme samlingsdetaljerne for din samling ved hjælp af kommandoerne nedenfor:
>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" } } ]
-
Indstil sorteringsegenskaben, når du opretter et indeks
Sådan kan du eksplicit angive en samling, når du opretter 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" } } } ]
-
Indstil sorteringsegenskaben, mens du opbygger et indeks
Du har også mulighed for eksplicit at indstille sorteringen for et indeks, mens du bygger det. For eksempel tilføjelse af "indeks" på navneegenskaben for testsamlingen med lokalitet 'en' og styrke 2:
>db.test.createIndex( { name: 1}, { collation: { locale: 'en', strength: 2 } })
-
Sådan forespørger du ved hjælp af sortering
Sorteringsegenskaben skal angives på forespørgselstidspunktet for at bruge indekset bygget med Collation:
db.test.find({name:'blah'})
Sådan foretager du forespørgsler i indekser, der ikke er følsomme over for store og små bogstaver med sortering i MongoDBClick To Tweet
-
Angiv sortering i din forespørgsel
Denne forespørgsel vil ikke bruge det ovenfor specificerede indeks, da sortering ikke blev specificeret. For at udnytte sorteringen skal vi specificere den eksplicit i forespørgslen:
db.test.find({name:'blah'}).collation({ locale: 'en', strength: 2 })
Selv hvis din samling har en standardsortering, skal du stadig angive sorteringen i din forespørgsel. Ellers vil MongoDB ikke bruge det specifikke indeks:
-
Samling ved opgradering fra en ældre MongoDB-version (3.2.x)
Hvis du opgraderer fra en ældre version af MongoDB (f.eks. 3.2.x), understøtter de eksisterende indekser ikke Collation. For at få Collation op at køre er dit første skridt at sikre, at alle de nye funktioner i 3.4.x er slået til:
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
Opgrader #MongoDB-versionen for at skabe ufølsomme indekser ved hjælp af CollationClick To TweetFlere oplysninger om inkompatibiliteterne findes i MongoDB 3.x release notes. Bemærk venligst, at når du har udført disse trin, er det sværere at nedgradere tilbage til 3.2. Vores næste trin er at tjekke versionen af dit indeks.
Når du har opgraderet til 3.4-kompatibilitet, kan du oprette nye indekser ved at følge de trin, vi skitserede tidligere. Hvis du bygger et stort indeks, skal du bruge ScaleGrid rullende indeksopbygningsjobbet til at tilføje dine indekser: