Docs Menu
Docs Home
/ /

Í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. La insensibilidad a mayúsculas y minúsculas se deriva de colación.

Importante

Puede crear un índice que no distinga entre mayúsculas y minúsculas con especificando db.collection.createIndex() la collation opción:

db.collection.createIndex(
{
<field>: <sortOrder>
},
{
collation:
{
locale : <locale>,
strength : < 1 | 2 >
}
}
)

Para especificar una intercalación para un índice que no distingue entre mayúsculas y minúsculas, incluya los siguientes campos en el objeto collation:

Campo
Descripción

locale

Especifica las reglas de idioma. Para ver la lista de configuraciones regionales disponibles, consulte Idiomas y configuraciones regionales compatibles.

strength

Determina las reglas de comparación. Un valor strength de 1 o 2 indica una intercalación que no distingue entre mayúsculas y minúsculas.

Para campos de intercalación adicionales, consulte Intercalación.

Para usar un índice que especifica una intercalación, las operaciones de consulta y ordenación deben especificar la misma intercalación que el índice. Si una colección ha definido una intercalación, todas las consultas e índices la heredan a menos que especifiquen explícitamente una diferente.

Para usar un índice que no distinga entre mayúsculas y minúsculas en una colección sin intercalación predeterminada, cree un índice con intercalación y establezca el strength parámetro en 1 o 2 (consulte Intercalación para obtener una descripción detallada del strength parámetro). Debe especificar la misma intercalación en el nivel de consulta para usar la intercalación a nivel de índice.

El siguiente ejemplo crea una colección sin intercalación predeterminada y luego agrega un índice en el campo type con una intercalación que no distingue entre mayúsculas y minúsculas.

db.createCollection("fruit")
db.fruit.createIndex(
{ type: 1 },
{ collation: { locale: 'en', strength: 2 } }
)

Para utilizar el índice, las consultas deben especificar la misma intercalación.

db.fruit.insertMany( [
{ type: "apple" },
{ type: "Apple" },
{ type: "APPLE" }
] )
db.fruit.find( { type: "apple" } ) // does not use index, finds one result
db.fruit.find( { type: "apple" } ).collation( { locale: 'en', strength: 2 } )
// uses the index, finds three results
db.fruit.find( { type: "apple" } ).collation( { locale: 'en', strength: 1 } )
// does not use the index, finds three results

Cuando creas una colección con una intercalación por defecto, todos los índices que crees después heredarán esa intercalación a menos que especifiques una intercalación diferente. Todas las queries que no especifiquen una intercalación diferente heredarán también la intercalación por defecto.

El siguiente ejemplo crea una colección llamada names con una intercalación predeterminada y luego crea un índice en el campo first_name.

db.createCollection("names", { collation: { locale: 'en_US', strength: 2 } } )
db.names.createIndex( { first_name: 1 } ) // inherits the default collation

Insertar una pequeña colección de nombres:

db.names.insertMany( [
{ first_name: "Betsy" },
{ first_name: "BETSY"},
{ first_name: "betsy"}
] )

Las queries en esta colección utilizan por defecto la intercalación especificada, y si es posible, también utilizan el índice.

db.names.find( { first_name: "betsy" } )
// inherits the default collation: { collation: { locale: 'en_US', strength: 2 } }
// finds three results

La operación anterior utiliza la intercalación predeterminada de la colección y encuentra los tres documentos. Utiliza el índice del campo first_name para un mejor rendimiento.

Aún es posible realizar búsquedas que distingan entre mayúsculas y minúsculas en esta colección especificando una intercalación diferente en la consulta:

db.names.find( { first_name: "betsy" } ).collation( { locale: 'en_US' } )
// does not use the collection's default collation, finds one result

La operación anterior solo encuentra un documento, ya que utiliza una intercalación sin valor strength especificado. No utiliza la intercalación predeterminada de la colección ni el índice.

Volver

Propiedades

En esta página