Skip to content

Latest commit

 

History

History
124 lines (76 loc) · 7.67 KB

indices-unicos.md

File metadata and controls

124 lines (76 loc) · 7.67 KB

Índices únicos

Un índice único asegura que los campos indexados no almacenen valores duplicados; es decir, impone la unicidad de los campos indexados. De forma predeterminada, MongoDB crea un índice único en el campo _id durante la creación de una colección.NOTANuevo formato interno

A partir de MongoDB 4.2, para featureCompatibilityVersion (fCV) de 4.2 (o superior), MongoDB usa un nuevo formato interno para índices únicos que es incompatible con versiones anteriores de MongoDB. El nuevo formato se aplica tanto a índices únicos existentes como a índices únicos recién creados / reconstruidos.

Crear un índice único

Para crear un índice único, use el db.collection.createIndex() método con la uniqueopción establecida en true.

db.collection.createIndex( <key and index type specification>, { unique: true } )

Índice único en un solo campo

Por ejemplo, para crear un índice único en el user_idcampo de la memberscolección, use la siguiente operación en el mongoshell:

db.members.createIndex( { "user_id": 1 }, { unique: true } )

Índice compuesto único

También puede aplicar una restricción única a los índices compuestos . Si usa la restricción de unicidad en un índice compuesto , entonces MongoDB aplicará la unicidad en la combinación de los valores clave del índice.

Por ejemplo, para crear un índice único en groupNumber, lastnamey firstnamecampos de la memberscolección, utilice la siguiente operación en el mongoshell:

db.members.createIndex( { groupNumber: 1, lastname: 1, firstname: 1 }, { unique: true } )

Los hace cumplir de índice creados unicidad para la combinación de groupNumber, lastnamey firstnamevalores.

Para otro ejemplo, considere una colección con el siguiente documento:

{ _id: 1, a: [ { loc: "A", qty: 5 }, { qty: 10 } ] }

Cree un índice compuesto de varias cuñas único en a.locy a.qty:

db.collection.createIndex( { "a.loc": 1, "a.qty": 1 }, { unique: true } )

El índice único permite la inserción de los siguientes documentos en la colección, ya que el índice impone unicidad para la combinación de valores a.locy a.qty:

db.collection.insert( { _id: 2, a: [ { loc: "A" }, { qty: 5 } ] } )db.collection.insert( { _id: 3, a: [ { loc: "A", qty: 10 } ] } )

CONSEJOVer también:

Comportamiento

Restricciones

MongoDB no puede crear un índice único en los campos de índice especificados si la colección ya contiene datos que violarían la restricción única del índice.

No puede especificar una restricción única en un índice hash .

Creación de índices únicos en conjuntos de réplicas y clústeres fragmentados

Para conjuntos de réplicas y clústeres fragmentados, el uso de un procedimiento continuo para crear un índice único requiere que detenga todas las escrituras en la colección durante el procedimiento. Si no puede detener todas las escrituras en la colección durante el procedimiento, no utilice el procedimiento de sucesión. En su lugar, cree su índice único en la colección de la siguiente manera:

Restricción única en documentos separados

La restricción única se aplica a documentos separados de la colección. Es decir, el índice único evita que documentos separados tengan el mismo valor para la clave indexada.

Debido a que la restricción se aplica a documentos separados, para un índice de varias claves único , un documento puede tener elementos de matriz que dan como resultado valores de clave de índice repetidos siempre que los valores de clave de índice para ese documento no dupliquen los de otro documento. En este caso, la entrada de índice repetida se inserta en el índice solo una vez.

Por ejemplo, considere una colección con los siguientes documentos:

{ _id: 1, a: [ { loc: "A", qty: 5 }, { qty: 10 } ] }{ _id: 2, a: [ { loc: "A" }, { qty: 5 } ] }{ _id: 3, a: [ { loc: "A", qty: 10 } ] }

Cree un índice compuesto de varias cuñas único en a.locy a.qty:

db.collection.createIndex( { "a.loc": 1, "a.qty": 1 }, { unique: true } )

El índice único permite la inserción del siguiente documento en la colección si ningún otro documento de la colección tiene un valor de clave de índice de { "a.loc": "B", "a.qty": null }.

db.collection.insert( { _id: 4, a: [ { loc: "B" }, { loc: "B" } ] } )

Índice único y campo faltante

Si un documento no tiene un valor para el campo indexado en un índice único, el índice almacenará un valor nulo para este documento. Debido a la restricción única, MongoDB solo permitirá un documento que carece del campo indexado. Si hay más de un documento sin un valor para el campo indexado o falta el campo indexado, la generación del índice fallará con un error de clave duplicada.

Por ejemplo, una colección tiene un índice único en x:

db.collection.createIndex( { "x": 1 }, { unique: true } )

El índice único permite la inserción de un documento sin el campo xsi la colección aún no contiene un documento al que le falta el campo x:

db.collection.insert( { y: 1 } )

Sin embargo, los errores de índice únicos en la inserción de un documento sin el campo xsi la colección ya contiene un documento al que le falta el campo x:

db.collection.insert( { z: 1 } )

La operación no puede insertar el documento debido a la violación de la restricción única sobre el valor del campo x:

WriteResult({   "nInserted" : 0,   "writeError" : {      "code" : 11000,      "errmsg" : "E11000 duplicate key error index: test.collection.$a.b_1 dup key: { : null }"   }})