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.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
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

Conecte mongosh a uma instância mongos e crie o índice único. Inclua a chave de shard com hash region_id como um prefixo do índice composto:

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