Para garantizar la unicidad de los valores de la clave de fragmento, pase el parámetro unique como true al método sh.shardCollection().
Acerca de esta tarea
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.
No se puede especificar unique como true cuando se utiliza una clave de fragmento hash.
Se aplican las siguientes restricciones cuando se especifica unique: true:
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().Si la colección tiene un índice que admite la clave de partición pero ese índice no es único,
sh.shardCollection()devuelve un error.
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.
Si omite unique o especifica unique: false, sh.shardCollection() no modifica los índices existentes de la colección. Si ya existe un índice único en la clave de fragmento, dicho índice permanece único y el clúster fragmentado continúa aplicando la restricción de unicidad a los valores de la clave de fragmento en todos los fragmentos.
Para consultar el conjunto completo de restricciones que se aplican a los índices únicos en colecciones fragmentadas, consulte la sección "Mantener la unicidad en clústeres fragmentados".
Antes de comenzar
Confirme que ningún documento existente infringe la restricción de unicidad para los valores de la clave de fragmentación.
Conectar
mongosha una instancia demongos.
Pasos
El siguiente ejemplo divide la colección accounts.names en region_id y aplica una restricción de unicidad a los valores de la clave de la partición.
Divida la colección en partición.
Para dividir la colección en el índice único region_id. El parámetro unique es el tercer argumento de sh.shardCollection():
sh.shardCollection( "accounts.names", { region_id: 1 }, true )