Cómo crear un índice único en MongoDB

Como Crear Un Indice Unico En Mongodb



En MongoDB, un índice único garantiza que cada valor en un campo o grupo de campos particular dentro de una colección sea único. Usando el método createIndex(), podemos crear un campo de índice único para la colección específica. Para mantener la integridad de los datos y evitar entradas duplicadas en campos vitales, los índices únicos son útiles. El artículo cubrió las formas de crear un índice único para la colección específica. db.candidatos.insertMany([

{ nombre: 'Alexa Bill' , calificación: 'A' , curso: 'pitón' },

{ nombre: 'Jane marcas' , calificación: 'B' , curso: 'Java' },

{ nombre: 'Pablo Ken' , calificación: 'C' , curso: 'C#' },

{ nombre: 'Emily Jeo' , calificación: 'D' , curso: 'php' }

]);

También podemos crear un campo de índice único cuando la colección está presente con algunos documentos en su interior. Para esto insertamos el documento en la nueva colección el cual es “candidatos” cuya consulta de inserción se da de la siguiente manera:







Ejemplo 1: crear un índice único de un único campo

Podemos crear el índice usando el método createIndex() y podemos hacer que ese campo sea único especificando la opción única con el valor booleano 'verdadero'.



db.candidates.createIndex( {calificación: 1 }, { único: verdadero } )

Aquí, iniciamos el método createIndex() en la colección 'candidatos' para crear un índice único de un campo específico. Luego, proporcionamos el campo 'calificación' con el valor '1' para la especificación del índice. El valor de '1' aquí representa el índice ascendente de la colección. A continuación, especificamos la opción 'única' con el valor 'verdadero' para hacer cumplir la unicidad del campo 'calificación'.



El resultado representa que el índice único en el campo 'calificación' se crea para la colección 'candidatos':





Ejemplo 2: crear un índice único de más de un campo

En el ejemplo anterior, solo se crea un campo como índice único. Pero también podemos crear dos campos como un índice único simultáneamente usando el método createIndex().



db.candidates.createIndex( {calificación: 1 , curso: 1 }, { único: verdadero } )

Aquí llamamos al método createIndex() en la misma colección de 'candidatos'. Especificamos dos campos para el método createIndex() – “calificación” y “curso” – con el valor de “1” como primera expresión. Luego, configuramos la opción única con el valor 'verdadero' para crear estos dos campos únicos.

El resultado representa dos índices únicos, 'grado_1' y 'curso_1', para la siguiente colección de 'candidatos':

Ejemplo 3: crear un índice único compuesto de los campos

Sin embargo, también podemos crear un índice compuesto único dentro de la misma colección simultáneamente. Esto lo logramos a través de la siguiente consulta:

db.candidates.createIndex( { nombre: 1 , calificación: 1 , curso: 1 }, {único: verdadero}

Usamos el método createIndex() nuevamente para crear el índice único compuesto para la colección de 'candidatos'. Esta vez, pasamos tres campos – “grado”, “nombre” y “curso” – que actúan como campos de índice ascendente para la colección de “candidatos”. A continuación, llamamos a la opción 'única' para que el campo sea único, ya que se asigna 'verdadero' a esa opción.

El resultado muestra los resultados que muestran que los tres campos ahora son el índice único de la colección especificada:

Ejemplo 4: crear un índice único de valores de campos duplicados

Ahora, intentamos crear un índice único para el valor del campo duplicado, lo que genera un error para mantener la restricción de unicidad.

db.candidates.createIndex({nombre: 1 },{único:verdadero})

Aquí, aplicamos los criterios de índice únicos para el campo que contiene valores similares. Dentro del método createIndex(), llamamos al campo 'nombre' con el valor '1' para convertirlo en un índice único y definimos la opción única con el valor 'verdadero'. Como los dos documentos tienen el campo 'nombre' con valores idénticos, no podemos hacer de este campo un índice único de la colección de 'candidatos'. El error de clave duplicada se activa al ejecutar la consulta.

Como se esperaba, el resultado genera los resultados porque el campo de nombre tiene los mismos valores para dos documentos diferentes:

Por lo tanto, actualizamos la colección de 'candidatos' dando un valor único a cada campo de 'nombre' en el documento y luego creamos el campo 'nombre' como índice único. La ejecución de esa consulta generalmente crea el campo 'nombre' como índice único, como se muestra a continuación:

Ejemplo 5: crear un índice único de un campo faltante

Alternativamente, aplicamos el método createIndex() en el campo que no existe en ninguno de los documentos de la colección. Como resultado, el índice almacena un valor nulo en ese campo y la operación falla debido a una infracción del valor del campo.

db.candidates.createIndex( {correo electrónico: 1 }, { único: verdadero } )

Aquí, empleamos el método createIndex() donde el campo 'correo electrónico' recibe el valor de '1'. El campo 'correo electrónico' no existe en la colección 'candidatos' e intentamos convertirlo en un índice único para la colección 'candidatos' configurando la opción única en 'verdadero'.

Cuando se ejecuta la consulta para esto, obtenemos el error en el resultado porque falta el campo 'correo electrónico' en la colección 'candidatos':

Ejemplo 6: crear un índice único de un campo con una opción dispersa

A continuación, el índice único también se puede crear con la opción dispersa. La funcionalidad de un índice disperso es que solo incluye documentos que tienen el campo indexado, excluyendo los documentos que no tienen el campo indexado. Proporcionamos la siguiente estructura para configurar la opción dispersa:

db.candidates.createIndex( {curso: 1 },

{ nombre: 'índice_curso_unique_sparse' , único: verdadero, escaso: verdadero } )

Aquí, proporcionamos el método createIndex() donde el campo 'curso' se establece con el valor de '1'. Después de eso, especificamos la opción adicional para establecer un campo de índice único que es 'curso'. Las opciones incluyen el 'nombre' que establece el índice 'unique_sparse_course_index'. Luego, tenemos la opción 'única' que se especifica con el valor 'verdadero' y la opción 'escasa' también se establece en 'verdadero'.

El resultado crea un índice único y escaso en el campo 'curso' como se muestra a continuación:

Ejemplo 7: mostrar el índice único creado utilizando el método GetIndexes()

En el ejemplo anterior, solo se creó un índice único para la colección proporcionada. Para ver y obtener información sobre los índices únicos de la colección 'candidatos', utilizamos el siguiente método getIndexes():

db.candidates.getIndexes();

Aquí, llamamos a la función getIndexes() en la colección 'candidatos'. La función getIndexes() devuelve todos los campos de índice para la colección de 'candidatos' que creamos en los ejemplos anteriores.

El resultado muestra el índice único que creamos para la colección: ya sea un índice único, un índice compuesto o un índice disperso único:

Conclusión

Intentamos crear un índice único para los campos específicos de la colección. Exploramos las diversas formas de crear un índice único para un solo campo y varios campos. También intentamos crear un índice único donde la operación falla debido a una violación de una restricción única.