Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Mantener la singularidad en clústeres fragmentados

Un clúster fragmentado impone una restricción de unicidad entre fragmentos solo cuando el índice único se encuentra en la clave del fragmento o la incluye como prefijo. Esta página describe cómo mantener la unicidad al fragmentar una colección.

Para crear un índice único en una colección que ya está fragmentada, consulte Crear un índice único en una colección fragmentada existente. Para garantizar la unicidad de los valores de la clave de fragmentación, consulte Garantizar la unicidad de los valores de la clave de fragmentación. Para garantizar la unicidad de un campo que no puede formar parte de la clave de fragmentación, consulte Garantizar la unicidad de un campo que no es la clave de fragmentación.

Para refragmentar una colección con una restricción de unicidad, la nueva clave de fragmentación debe cumplir los requisitos de índice único para cualquier índice único existente. Para obtener más información, consulte Refragmentar una colección.

Un índice único garantiza que los campos indexados no almacenen valores duplicados. En una colección fragmentada, cada fragmento solo puede verificar sus propios datos en busca de duplicados, por lo que MongoDB solo puede aplicar la restricción en todo el clúster cuando se garantiza que cada documento con un valor de clave de índice determinado reside en el mismo fragmento. Incluir la clave del fragmento como prefijo del índice proporciona dicha garantía.

Para una colección particionada clasificada por rango, solo los siguientes índices pueden ser únicos:

  • El índice en la clave de fragmentación

  • Un índice compuesto donde la clave de partición es un prefijo

  • El índice _id por defecto; sin embargo, el índice _id solo aplica la restricción de unicidad por fragmento si el campo _id no es la clave de fragmentación.

Las restricciones de índices únicos implican que:

  • Para una colección particionada, no puede fragmentarse la colección si tiene varios índices únicos, a menos que la clave de partición sea el prefijo de todos los índices únicos.

  • Para una colección ya particionada, no puedes crear índices únicos en otros campos a menos que la clave de partición se incluya como prefijo.

  • Un índice único almacena un valor nulo para un documento al que le falta el campo indexado. Un campo de índice faltante se trata como otra instancia de un valor de clave de índice null. Para obtener más detalles, consulte Campo de documento faltante en un índice único de un solo campo.

También se aplican las siguientes restricciones:

  • No puedes especificar una restricción única en un índice encriptado.

  • Si existe una intercalación en la clave del índice, MongoDB solo puede garantizar la unicidad si la intercalación es simple.

  • Un índice único en la clave de fragmentación garantiza la unicidad de toda la combinación de claves, no de los componentes individuales de la clave de fragmentación.

Importante

Los clústeres particionados no aplican la restricción de unicidad en los campos _id en todo el clúster cuando el campo _id no es la clave de partición.

Si el campo _id no es la clave de partición, la restricción de unicidad solo se aplica a la partición que almacena el documento. Esto significa que dos o más documentos pueden tener el mismo valor _id, siempre que se encuentren en particiones diferentes.

Por ejemplo, una colección particionada con la clave de partición {x: 1} que se extiende por dos particiones A y B. Dado que la clave _id no es la clave de partición, la colección podría tener un documento con el valor _id 1 en la partición A y otro documento con el valor _id 1 en el partición B.

En los casos en que el campo _id no sea la clave de partición, MongoDB espera que las aplicaciones garanticen la unicidad de los valores de _id entre las particiones, por ejemplo, utilizando un identificador único para completar el campo _id.

  • Identifique la clave de fragmentación de la colección. Para ver la clave de fragmentación de una colección fragmentada, ejecute el método sh.status() y localice la colección en la salida.

  • Confirme que ningún documento existente infringe la restricción de unicidad del campo. Si una partición contiene documentos con valores duplicados, la operación de creación de índice puede tener éxito en las particiones sin duplicados, pero fallar en la partición con duplicados, lo que deja índices inconsistentes en todas las particiones.

  • Conectar mongosh a una instancia de mongos.

El siguiente ejemplo divide la colección accounts.names en region_id y aplica una restricción única a la combinación de region_id y email.

1

Cree el índice que planea usar como la clave de partición:

db.names.createIndex( { region_id: 1 } )
region_id_1
2

Cree el índice único para la colección. Incluya la clave de fragmentación como prefijo del índice:

db.names.createIndex(
{ region_id: 1, email: 1 },
{ unique: true }
)
region_id_1_email_1
3

Para fragmentar la colección, ejecute el método sh.shardCollection():

sh.shardCollection( "accounts.names", { region_id: 1 } )
{
collectionsharded: 'accounts.names',
ok: 1,
'$clusterTime': {
clusterTime: Timestamp( { t: 1759260515, i: 58 } ),
signature: {
hash: Binary.createFromBase64( 'AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0 ),
keyId: Long( '0' )
}
},
operationTime: Timestamp( { t: 1759260515, i: 57 } )
}

Si divides una colección que contiene un índice único que no incluye la clave de división como prefijo, MongoDB devuelve un error cuando ejecutas el comandoshardCollection.