Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Crie um índice exclusivo em uma coleção fragmentada existente

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.

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 coleção fragmentada, o MongoDB impõe a exclusividade somente quando o índice é a chave de shard com hash ou inclui a chave de shard com hash como um 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 como manter a exclusividade em um campo que não faz parte da chave de shard com hash, consulte Restrições exclusivas em campos arbitrários.

  • 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.

O exemplo a seguir cria um índice único no campo email da coleção accounts.names , que é sharded no campo region_id .

1

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()
2

Connect mongosh to a mongos instance and create the unique index. Include the shard key region_id as a prefix of the compound index:

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