sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo crear índices que no distinguen entre mayúsculas y minúsculas en MongoDB

Cómo crear un índice que no distingue entre mayúsculas y minúsculas de MongoDB

En esta publicación, le mostraremos cómo crear índices que no distinguen entre mayúsculas y minúsculas en MongoDB utilizando intercalaciones, una nueva función lanzada por MongoDB en la versión 3.4.

¿Qué son los índices que no distinguen entre mayúsculas y minúsculas?

Los índices que no distinguen entre mayúsculas y minúsculas admiten consultas que realizan comparaciones de cadenas sin tener en cuenta las mayúsculas y minúsculas, y con el soporte de Collation de MongoDB 3.4, ahora es posible compilarlas. La intercalación le brinda la capacidad de especificar reglas específicas del idioma para la comparación de cadenas. Dado que las versiones anteriores de MongoDB no admitían la intercalación, estaba limitado a realizar una comparación de índices que distingue entre mayúsculas y minúsculas. En los escenarios que necesitaban un comportamiento que no distinga entre mayúsculas y minúsculas, la única opción era convertir/almacenar todas sus cadenas en mayúsculas o minúsculas y luego hacer la comparación. Como puede imaginar, esto genera muchos problemas con las consultas y las operaciones de indexación.

La propiedad Collation se puede establecer en el nivel de colección o explícitamente al crear un índice.

  1. Establezca la propiedad de intercalación en el nivel de colección

    Si se establece en el nivel de la colección, no es necesario especificarlo con cada comando de creación de índice activado, ya que el índice hereda la intercalación de la colección. . A menos que se especifique explícitamente durante el tiempo de creación, una colección no tiene una intercalación asociada. Puede determinar los detalles de intercalación de su colección utilizando los comandos que se proporcionan a continuación:

    >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. Establecer la propiedad de intercalación al crear un índice

    Así es como puede especificar explícitamente una intercalación al crear una colección:

    >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. Establezca la propiedad de intercalación mientras construye un índice

    También tiene la opción de establecer explícitamente la Intercalación para un índice mientras lo crea. Por ejemplo, agregar "índice" en la propiedad de nombre de la colección de prueba con configuración regional 'en' y fuerza 2:

    >db.test.createIndex( { name: 1}, { collation: { locale: 'en', strength: 2 } })
    
  4. Cómo realizar consultas mediante intercalación

    La propiedad Collation debe especificarse en el momento de la consulta para usar el índice creado con Collation:

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

    Cómo consultar índices que no distinguen entre mayúsculas y minúsculas con Collation en MongoDBClick To Tweet

  5. Especifique la intercalación en su consulta

    Esta consulta no utilizará el índice especificado anteriormente ya que no se especificó la intercalación. Para aprovechar la intercalación, debemos especificarla explícitamente en la consulta:

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

    Incluso si su colección tiene una intercalación predeterminada, aún debe especificar la intercalación en su consulta. De lo contrario, MongoDB no utilizará el índice específico:

  6. Intercalación al actualizar desde una versión anterior de MongoDB (3.2.x)

    Si actualiza desde una versión anterior de MongoDB (por ejemplo, 3.2.x), los índices existentes no admitirán la intercalación. Para que Collation esté en funcionamiento, el primer paso es asegurarse de que todas las funciones nuevas de 3.4.x estén activadas:

    db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
    
    Actualice la versión de #MongoDB para crear índices que no distingan entre mayúsculas y minúsculas mediante CollationClick To Tweet

    Se proporciona más información sobre las incompatibilidades en las notas de la versión de MongoDB 3.x. Tenga en cuenta que una vez que realice estos pasos, será más difícil volver a la versión 3.2. Nuestro siguiente paso es verificar la versión de su índice.

    Una vez que haya actualizado a las compatibilidades 3.4, puede crear nuevos índices siguiendo los pasos que describimos anteriormente. Si está creando un índice grande, utilice el trabajo de creación de índice móvil de ScaleGrid para agregar sus índices: