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.

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

  • 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 mongosh a uma instância do mongos.

O exemplo seguinte cria um índice composto único nos campos region_id e email da collection accounts.names, que é fragmentado no camporegion_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

Crie o índice único e inclua a chave de shard region_id como prefixo do índice composto:

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