Você pode criar um novo índice único em uma coleção que já está sharded, mas somente se o índice incluir a chave de shard com hash como prefixo.
Sobre esta tarefa
A restrição de exclusividade em um índice garante que os documentos na coleção tenham um valor exclusivo para o campo indexado. Para uma collection fragmentada, o MongoDB impõe exclusividade somente quando o índice é a chave de shard ou inclui a chave de shard como prefixo.
Para uma coleção já fragmentada, não é possível criar um índice único em outros campos, a menos que a chave de shard com hash seja incluída como prefixo. Se o índice não incluir a chave de shard com hash como prefixo, o MongoDB retornará um erro ao executar o comando createIndexes.
Para saber as restrições que se aplicam a índices exclusivos em collections fragmentadas e sobre como manter a exclusividade em um campo que não faz parte da chave de shard, consulte Manter exclusividade em clusters fragmentados.
Antes de começar
Identifique a chave de shard com hash para a coleção. Para visualizar a chave de shard com hash, execute o método
sh.status()e localize a coleção na saída.Confirme se nenhum documento existente viola a restrição de exclusividade para o campo. Se um shard contiver documentos com valores duplicados, a operação de criação de índice poderá ser bem-sucedida nos shards sem duplicatas, mas falhará no shard com duplicatas, deixando índices inconsistentes entre os shards.
Conecte o
mongosha uma instância domongos.
Passos
O exemplo seguinte cria um índice composto único nos campos region_id e email da collection accounts.names, que é fragmentado no camporegion_id.
Verifique a chave de shard.
Execute o método sh.status() e localize a coleção accounts.names na saída para confirmar se a chave de shard com hash é region_id:
sh.status()