MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment créer des index insensibles à la casse dans MongoDB

Comment créer un index MongoDB insensible à la casse

Dans cet article, nous allons vous montrer comment créer des index insensibles à la casse dans MongoDB à l'aide de Collations, une nouvelle fonctionnalité publiée par MongoDB dans la version 3.4.

Que sont les index insensibles à la casse ?

Les index insensibles à la casse prennent en charge les requêtes qui effectuent des comparaisons de chaînes sans tenir compte de la casse des lettres, et avec la prise en charge de Collation par MongoDB 3.4, il est désormais possible de les créer. Le classement vous permet de spécifier des règles spécifiques à la langue pour la comparaison de chaînes. Étant donné que les versions précédentes de MongoDB ne prenaient pas en charge le classement, vous étiez limité à effectuer une comparaison d'index sensible à la casse. Dans les scénarios nécessitant un comportement insensible à la casse, la seule option consistait à convertir/stocker toutes vos chaînes en majuscules ou en minuscules, puis à effectuer la comparaison. Comme vous pouvez l'imaginer, cela cause beaucoup de problèmes avec les requêtes et les opérations d'indexation.

La propriété Collation peut être définie au niveau de la collection ou explicitement lors de la création d'un index.

  1. Définir la propriété Collation au niveau de la collection

    Si défini au niveau de la collection, il n'est pas nécessaire de le spécifier avec chaque commande create-index activée car l'index hérite du classement de la collection . Sauf indication explicite lors de la création, une collection n'a pas de classement associé. Vous pouvez déterminer les détails de classement de votre collection à l'aide des commandes fournies ci-dessous :

    >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. Définir la propriété de classement lors de la création d'un index

    Voici comment vous pouvez spécifier explicitement un classement lors de la création d'une collection :

    >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. Définir la propriété de classement lors de la création d'un index

    Vous avez également la possibilité de définir explicitement le classement d'un index lors de sa création. Par exemple, en ajoutant « index » sur la propriété name de la collection de tests avec les paramètres régionaux « en » et la force 2 :

    >db.test.createIndex( { name: 1}, { collation: { locale: 'en', strength: 2 } })
    
  4. Comment interroger à l'aide du classement

    La propriété Collation doit être spécifiée au moment de la requête pour utiliser l'index construit avec Collation :

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

    Comment interroger des index insensibles à la casse avec Collation dans MongoDBClick To Tweet

  5. Spécifier le classement dans votre requête

    Cette requête n'utilisera pas l'index spécifié ci-dessus car le classement n'a pas été spécifié. Afin de tirer parti du classement, nous devons le spécifier explicitement dans la requête :

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

    Même si votre collection a un classement par défaut, vous devez toujours spécifier le classement dans votre requête. Sinon, MongoDB n'utilisera pas l'index spécifique :

  6. Collation lors de la mise à niveau à partir d'une ancienne version de MongoDB (3.2.x)

    Si vous effectuez une mise à niveau à partir d'une ancienne version de MongoDB (par exemple, 3.2.x), les index existants ne prendront pas en charge le classement. Pour que Collation soit opérationnel, la première étape consiste à vous assurer que toutes les nouvelles fonctionnalités de la version 3.4.x sont activées :

    db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
    
    Mettez à niveau la version #MongoDB pour créer des index insensibles à la casse à l'aide de CollationClick To Tweet

    De plus amples informations sur les incompatibilités sont fournies dans les notes de version de MongoDB 3.x. Veuillez noter qu'une fois ces étapes effectuées, il est plus difficile de revenir à la version 3.2. Notre prochaine étape consiste à vérifier la version de votre index.

    Une fois que vous avez effectué la mise à niveau vers les compatibilités 3.4, vous pouvez créer de nouveaux index en suivant les étapes décrites précédemment. Si vous construisez un index volumineux, veuillez utiliser la tâche de construction d'index glissant ScaleGrid pour ajouter vos index :