MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come creare indici senza distinzione tra maiuscole e minuscole in MongoDB

Come creare un indice MongoDB senza distinzione tra maiuscole e minuscole

In questo post, ti mostreremo come creare indici senza distinzione tra maiuscole e minuscole in MongoDB utilizzando Collations, una nuova funzionalità rilasciata da MongoDB nella versione 3.4.

Cosa sono gli indici senza distinzione tra maiuscole e minuscole?

Gli indici senza distinzione tra maiuscole e minuscole supportano query che eseguono confronti di stringhe indipendentemente dalle lettere maiuscole e minuscole e, con il supporto di MongoDB 3.4 di collation, ora è possibile crearle. Le regole di confronto ti danno la possibilità di specificare regole specifiche della lingua per il confronto delle stringhe. Poiché le versioni precedenti di MongoDB non supportavano le regole di confronto, eri limitato a eseguire un confronto dell'indice con distinzione tra maiuscole e minuscole. Negli scenari che richiedevano un comportamento senza distinzione tra maiuscole e minuscole, l'unica opzione era convertire/memorizzare tutte le stringhe in maiuscolo o minuscolo e quindi eseguire il confronto. Come puoi immaginare, questo causa molti problemi con le query e le operazioni di indicizzazione.

La proprietà Collation può essere impostata a livello di raccolta o in modo esplicito durante la creazione di un indice.

  1. Imposta la proprietà di confronto a livello di raccolta

    Se impostato a livello di raccolta, non è necessario specificarlo con ogni comando create-index attivo poiché l'indice eredita le regole di confronto della raccolta . A meno che non sia specificato in modo esplicito durante la creazione, a una raccolta non è associata alcuna raccolta. Puoi determinare i dettagli della Fascicolazione della tua raccolta utilizzando i comandi forniti di seguito:

    >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. Imposta la proprietà di confronto durante la creazione di un indice

    Ecco come puoi specificare esplicitamente una confronto durante la creazione di una raccolta:

    >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. Imposta la proprietà di confronto durante la creazione di un indice

    Hai anche la possibilità di impostare in modo esplicito la Fascicolazione per un indice mentre lo costruisci. Ad esempio, aggiungendo "index" alla proprietà name della raccolta di test con locale "en" e forza 2:

    >db.test.createIndex( { name: 1}, { collation: { locale: 'en', strength: 2 } })
    
  4. Come eseguire query utilizzando le regole di confronto

    La proprietà Collation deve essere specificata al momento della query per utilizzare l'indice creato con Collation:

    db.test.find({name:'blah'})
    

    Come eseguire query sugli indici senza distinzione tra maiuscole e minuscole con Collation in MongoDBClick To Tweet

  5. Specifica le regole di confronto nella tua query

    Questa query non utilizzerà l'indice specificato sopra poiché Collation non è stata specificata. Per sfruttare la Collation, dobbiamo specificarla esplicitamente nella query:

    db.test.find({name:'blah'}).collation({ locale: 'en', strength: 2 })
    

    Anche se la tua raccolta ha un confronto predefinito, devi comunque specificare il confronto nella query. In caso contrario, MongoDB non utilizzerà l'indice specifico:

  6. Fascicolazione durante l'aggiornamento da una versione precedente di MongoDB (3.2.x)

    Se esegui l'upgrade da una versione precedente di MongoDB (ad es. 3.2.x), gli indici esistenti non supporteranno le regole di confronto. Per far funzionare Collation, il primo passo è assicurarsi che tutte le nuove funzionalità della 3.4.x siano attive:

    db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
    
    Aggiorna la versione #MongoDB per creare indici senza distinzione tra maiuscole e minuscole utilizzando CollationClick To Tweet

    Ulteriori informazioni sulle incompatibilità sono fornite nelle note di rilascio di MongoDB 3.x. Tieni presente che una volta eseguiti questi passaggi, è più difficile eseguire il downgrade alla versione 3.2. Il nostro prossimo passo è controllare la versione del tuo indice.

    Dopo aver eseguito l'aggiornamento alla compatibilità 3.4, puoi creare nuovi indici seguendo i passaggi descritti in precedenza. Se stai creando un indice di grandi dimensioni, utilizza il processo di creazione dell'indice a rotazione ScaleGrid per aggiungere i tuoi indici: