Las colecciones fragmentadas requieren un índice que admita la clave de partición. El índice puede ser un índice en la clave de partición o un índice compuesto donde la clave de partición es un prefijo del índice.
Si la colección está vacía,
sh.shardCollection()crea el índice en la clave de partición si dicho índice aún no existe.Si la colección no está vacía, primero se debe crear el índice antes de usar
sh.shardCollection().Si vuelves a dividir una colección utilizando
sh.reshardCollection(), no necesitas crear el índice en la nueva clave de partición de antemano. La operación de resharding compila automáticamente los índices requeridos. Para obtener más información, consulta el procedimiento de reequilibrio de una colección.
No se puede descartar ni ocultar un índice si es el único índice no oculto que admite la clave de fragmentación.
A partir de MongoDB 7.0.3, 6.0.12, y 5.0.22, puede descartar el índice de una clave de fragmentación encriptada. Para obtener más información, consulte Descartar un índice de clave de fragmentación encriptada.
Unique Indexes
MongoDB puede aplicar una restricción de unicidad en un índice de clave de partición clasificado por rango. El uso de un índice único en la clave de partición aplica la unicidad en toda la combinación de la clave y no en los componentes individuales de la clave de partición.
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
_idpor defecto; sin embargo, el índice_idsolo aplica la restricción de unicidad por fragmento si el campo_idno es 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.
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; es decir, un campo de índice que falta se trata como otra instancia de un valor de clave de índice
null. Para más información, consultar Campo de documento faltante en un índice único de un solo campo.
Para aplicar la unicidad en los valores de la clave de fragmentación, pasar el parámetro unique como true al método sh.shardCollection():
Si la colección está vacía,
sh.shardCollection()crea un índice único en la clave de fragmentación si tal índice no existe ya.Si la colección no está vacía, primero se debe crear el índice antes de usar
sh.shardCollection().
Aunque se puede tener un índice compuesto único donde la clave de fragmentación es un prefijo, si se utiliza el parámetro unique, la colección debe tener un índice único que esté en la clave de partición.
No puedes especificar una restricción única en un índice encriptado.
Para mantener la singularidad en un campo que no es la clave de partición, se debe consultar Restricciones de singularidad en campos arbitrarios.