MongoDB – Tipos de índice

La belleza de una base de datos radica en la indexación, es decir, obtener los datos en un corto período de tiempo sin iterar sobre todo el conjunto de datos. MongoDB es una base de datos de tipo de documento NoSQL que sigue la indexación. Los índices facilitan la búsqueda en una colección con el número limitado de documentos. Un árbol binario es la estructura de datos utilizada por un índice. En los documentos, el campo _id es un índice predeterminado que MongoDB crea automáticamente y no podemos descartar este índice. Si intentamos eliminar este índice usando el método dropIndexe() , nos dará un error. Y el valor de este campo identifica de forma única un documento de otros. 

Crear un índice:

Junto con el índice predeterminado, podemos crear índices por nuestra cuenta usando uno o más índices en las colecciones especificadas.

Sintaxis:

db.Colección.nombre.createIndex(

    claves: {Field_name:1/-1},

    opciones : <documento>,

    commitQuorum : <string o entero>

)

Ejemplo:

En los siguientes ejemplos, estamos trabajando con:

Base de datos: gfg

Colección: estudiantes

Documento: Cuatro documentos que contienen los detalles de los estudiantes

db.students.createIndex({studentsId:1})

En la imagen de abajo, primero, encontramos los detalles de la colección. Entonces, aquí el nombre de la colección es estudiantes y en el que queremos crear un índice sobre la columna «studentId». 

Nota: MongoDB distingue entre mayúsculas y minúsculas. Por lo tanto, el ID de estudiante y el ID de estudiante se tratan de manera diferente.

Al ejecutar nuestra consulta, recibimos el mensaje «ok», lo que significa que se crea un índice y también «numIndexesAfter»: 2″, un índice ya está disponible (índice predeterminado) y, por lo tanto, el recuento aumenta en 2.

Tipos de índice 

MongoDB proporciona diferentes tipos de índices que se utilizan según el tipo de datos o consultas. Los índices soportados por MongoDB son los siguientes:

1. Índice de un solo campo: un índice de un solo campo significa un índice en un solo campo de un documento. Este índice es útil para obtener datos en orden ascendente y descendente. 

Sintaxis:

db.students.createIndex({“<fieldName>” : <1 o -1>});

Aquí 1 representa que el campo se especifica en orden ascendente y -1 para el orden descendente.

Ejemplo:

db.students.createIndex({studentsId:1})

En este ejemplo, estamos creando un índice único en el campo StudentsId y el campo se especifica en orden ascendente.

2. Índice compuesto: podemos combinar múltiples campos para la indexación compuesta y eso ayudará a buscar o filtrar documentos de esa manera. O, en otras palabras, el índice compuesto es un índice en el que una sola estructura de índice contiene múltiples referencias.

Sintaxis:

db.<colección>.createIndex( { <campo1>: <tipo>, <campo2>: <tipo2>, … })

Aquí, podemos combinar los campos obligatorios en este patrón. Además, el valor de estos campos es 1 (para orden ascendente) o -1 (para orden descendente).

Nota: Los índices compuestos pueden tener un solo campo de índice hash, pero los índices hash requieren una función hash para calcular el hash del valor del campo de índice.

Ejemplo:

Aquí, creamos un índice compuesto en studentAge: 1, studentName:1

db.students.createIndex({studentAge: 1, studentName:1})

db.students.find().sort({"studentAge":1,"studentName":1}).pretty()

Aquí estamos tomando la funcionalidad de clasificación basada en «Edad del estudiante» seguido de los campos «Nombre del estudiante» y, por lo tanto, en la imagen a continuación, aunque hay 2 documentos que coinciden con «Edad del estudiante = 25», ya que el Nombre del estudiante es un valor adicional dado, como un segundo documento , se muestra el nombre del estudiante con el valor «Geek40» y luego, solo como tercer documento, se muestra el nombre del estudiante con el valor «GeeksForGeeksbest». Por lo tanto, a veces será necesario crear índices compuestos cuando queramos tener un nivel de filtración más cercano.

3. Índice de claves múltiples: MongoDB utiliza los índices de claves múltiples para indexar los valores almacenados en arrays. Cuando indexamos un campo que contiene un valor de array, MongoDB crea automáticamente un índice separado de todos y cada uno de los valores presentes en esa array. Usando estos índices multiclave, podemos encontrar fácilmente un documento que contenga una array haciendo coincidir los elementos. En MongoDB, no necesita especificar explícitamente el índice de claves múltiples porque MongoDB determina automáticamente si crear un índice de claves múltiples si el campo indexado contiene un valor de array. 

Sintaxis:

db.<colección>.createIndex( { <campo>: <tipo>} )

Aquí, el valor del campo es 1 (para orden ascendente) o -1 (para orden descendente).

Ejemplo:

En la colección de estudiantes, tenemos tres documentos que contienen campos de array.

Ahora creamos un índice multiclave:

db.students.createIndex({skillsets:1})

Ahora vemos el documento que contiene conjuntos de habilidades: [“Java”, “Android”]

db.students.find({skillsets:["Java", "Android"]}).pretty()

4. Índices geoespaciales: es una característica importante en MongoDB. MongoDB proporciona dos índices geoespaciales conocidos como índices 2d e índices de esfera 2d. Con estos índices podemos consultar datos geoespaciales. Aquí, los índices 2d admiten consultas que se utilizan para buscar datos almacenados en un plano bidimensional. Solo admite datos almacenados en pares de coordenadas heredados. Mientras que los índices de esfera 2d admiten consultas que se utilizan para encontrar los datos almacenados en la geometría esférica. Admite datos almacenados en pares de coordenadas heredados, así como objetos GeoJSON. También admite consultas como consultas de inclusión, intersección y proximidad, etc.

Sintaxis de índices de esfera 2d:

db.<colección>.createIndex( { <Campo de ubicación>: “2dsphere”} )

Ejemplo:

Supongamos que los datos disponibles para «industrias»

Ahora, creemos un índice de esfera 2d en el campo de ubicación:

db.industries.createIndex({location:"2dsphere"})

Ahora, en la ejecución de la siguiente consulta, obtenemos

db.industries.find(
{
    location:
        {$near:
            {
                $geometry:{type: "Point", coordinates:[-73.9667, 40.78]},
                $minDistance:1000,
                $maxDistance: 5000
            }
        }
    }
}.pretty()

Aquí, el operador «$near» devuelve documentos que están en el rango especificado de al menos 1000 metros y como máximo 5000 metros del punto GeoJSON especificado y, por lo tanto, solo obtenemos resultados de Tidal Park. Similar a $near, puede admitir $nearSphere, $geoWithin, $geoIntersects, $geoNear, etc.

5. Índice de texto: MongoDB admite operaciones de consulta que realizan una búsqueda de texto de contenido de string. El índice de texto nos permite encontrar el contenido de la string en la colección especificada. Puede incluir cualquier campo que contenga contenido de string o una array de elementos de string. Una colección puede contener como máximo un índice de texto. Se le permite utilizar el índice de texto en el índice compuesto.  

Sintaxis:

db.<colección>.createIndex( { <campo>: “texto”} )

También podemos dar frases exactas para buscar encerrando los términos de búsqueda entre comillas dobles.

db.<nombre de la colección>.find( { $texto: { $búsqueda: “\”<Término de búsqueda exacto>\”” } } )

Como aquí está encerrado entre comillas dobles, los resultados de la búsqueda contienen solo los datos buscados exactos.

En caso de que queramos excluir algunos textos en nuestro término de búsqueda, podemos hacer lo siguiente: 

db.<nombre de la colección>.find( { $texto: { $búsqueda: “ <términos de búsqueda> -<términos de búsqueda no requeridos> ” } } )

Anteponer un carácter – hace que se ignore el texto de búsqueda y se considere el resto del texto.

En la búsqueda de texto, los resultados están disponibles sin clasificar. Para que esté disponible en orden ordenado de puntuación de relevancia, se necesita el campo $meta textScore y ordenarlo. Ejemplo:

db.singers.find(
  { $text: { $search: "Annisten" } },
  { score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )

Ejemplo:

En la colección de accesorios creamos un índice de texto:

db.accessories.createIndex({name: "text", description: "text"})

Ahora mostramos aquellos documentos que contienen la string “Entrada”:

db.accessories.find({$text:{$search: "Input"}})

6. Hash Index: para mantener las entradas con hash de los valores del campo indexado (principalmente el campo _id en todas las colecciones), usamos Hash Index. Este tipo de índice se requiere principalmente en la distribución uniforme de datos mediante fragmentación. Las claves hash son útiles para particionar los datos en el clúster fragmentado.

Sintaxis:

db.<colección>.createIndex( { _id: “hash” } )

Desde la versión 4.4 en adelante, se aplica el índice hash compuesto

7. Índice comodín: MongoDB admite la creación de índices en un campo o conjunto de campos y, si se menciona el conjunto de campos, se denomina Índice comodín. En general, el índice comodín no incluye el campo _id, pero si desea incluir el campo _id en el índice comodín, debe definirlo explícitamente. MongoDB le permite crear múltiples índices comodín en la colección dada. Los índices comodín admiten consultas de campos desconocidos o arbitrarios.

Sintaxis:

Para crear un índice de comodines en el campo especificado:

db.<colección>.createIndex( { “campo.$**”:1 } )

Para crear un índice de comodines en todo el campo:

db.<colección>.createIndex( { “$**”:1 } )

Para crear un índice de comodines en varios campos específicos:

db.<colección>.createIndex(

 { “$**”:1 }, 

{“proyección comodín”:

{“campo1”: 1, “campo2”:2}

})

Ejemplo:

En la colección de libros creamos el índice comodín:

Vamos a crear un índice para el campo «autorEtiquetas»

db.book.createIndex( { "authorTags.$**" : 1 } )

Dado que el «índice» se crea en un conjunto de campos, podemos consultar fácilmente de la siguiente manera

db.book.find( { "authorTags.inclusions" : "RDBMS" } )
db.book.find( { "authorTags.usedin" : "Multipurpose" } )

Publicación traducida automáticamente

Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *