Docs Menu
Docs Home
/
Manual de base de datos

Restricciones únicas en campos arbitrarios

Si no puede usar un campo único como clave de fragmento o si necesita aplicar la unicidad en varios campos, debe crear otro colección para que actúe como una "colección proxy". Esta colección debe contener tanto una referencia al documento original (es decir, su ObjectId) y la clave única.

Considere una colección records que almacena información del usuario. El campo email no es la clave del fragmento, pero debe ser único.

La colección proxy contendría entonces lo siguiente:

{
"_id" : ObjectId("...")
"parent_id" : "<ID>"
"email" : "<string>"
}

Utilice el siguiente comando para crear un índice único en el campo email:

db.proxy.createIndex( { "email" : 1 }, { unique : true } )

El siguiente ejemplo intenta primero insertar un documento que contiene el campo de destino y un ID único generado en la colección proxy. Si la operación se realiza correctamente, inserta el documento completo en la colección records.

records = db.getSiblingDB('records');
proxy = db.getSiblingDB('proxy');
var primary_id = ObjectId();
proxy.insertOne({
"_id" : primary_id
"email" : "example@example.net"
})
// if: the above operation returns successfully,
// then continue:
records.insertOne({
"_id" : primary_id
"email": "example@example.net"
// additional information...
})

Tenga en cuenta que esta metodología requiere la creación de una ID única para el campo primary_id en lugar de permitir que MongoDB la cree automáticamente al insertar el documento.

Si necesita imponer unicidad en múltiples campos, entonces cada campo requerirá su propia colección de proxy.

Tip

Consulte:

La documentación completa de: createIndex() shardCollectiony.

  • Su aplicación debe detectar errores al insertar documentos en la colección "proxy" y debe garantizar la coherencia entre las dos colecciones.

  • Si la colección proxy requiere particionado, se debe particionar en el único campo en el que se desea aplicar la unicidad.

  • Para garantizar la unicidad en más de un campo mediante colecciones de proxy fragmentadas, debe tener una colección de proxy para cada campo que desee garantizar. Si crea varios índices únicos en una sola colección de proxy,no podrá fragmentar las colecciones de proxy.

Next

¿Qué es MongoDB?

En esta página