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

Mantenha a exclusividade em clusters fragmentados

Um cluster fragmentado impõe uma restrição exclusiva entre shards somente quando o índice único está na chave de shard ou inclui a chave de shard como um prefixo. Esta página descreve como manter a exclusividade ao fragmentar uma coleção.

Para criar um índice único em uma collection que já esteja fragmentada, consulte Criar um índice exclusivo em uma collection fragmentada existente. Para impor exclusividade nos valores de chave de fragmento, consulte Impor exclusividade nos valores de chave de fragmento. Para impor a exclusividade em um campo que não pode fazer parte da chave de shard, consulte Impor exclusividade em um campo que não seja a chave de shard.

Para refragmentar uma collection que tenha uma restrição de exclusividade, a nova chave de shard deve satisfazer os requisitos de índice único para quaisquer índices únicos existentes. Para obter detalhes, consulte Refragmentar uma collection.

Um índice único garante que os campos indexados não armazenem valores duplicados. Em uma coleção fragmentada, cada fragmento só pode verificar seus próprios dados em busca de duplicatas, para que o MongoDB possa impor a restrição em todo o cluster somente quando cada documento com um determinado valor de chave de índice tiver a garantia de permanecer no mesmo fragmento. A inclusão da chave de shard como prefixo do índice fornece essa garantia.

Para uma coleção fragmentada variada, somente os seguintes índices podem ser exclusivos:

  • o índice na chave de fragmentação

  • um índice composto onde a chave de fragmentação é um prefixo

  • O _id índice padrão; no entanto, o _id índice só impõe a restrição de exclusividade por fragmento se o _id campo não for a chave de fragmento.

As restrições de índice único significam que:

  • Para uma collection que será fragmentada, você não poderá fragmentar a collection se a collection tiver vários índices únicos, a menos que a chave de shard seja o prefixo de todos os índices únicos.

  • Para uma collection já fragmentada, não é possível criar índices únicos em outros campos, a menos que a chave de shard seja incluída como prefixo.

  • Um índice único armazena um valor nulo para um documento sem o campo indexado. Um campo de índice ausente é tratado como outra instância de um valor de chave de índice null. Para obter detalhes, consulte Campo de documento ausente em um índice exclusivo de campo único.

As seguintes restrições também se aplicam:

  • Você não pode especificar uma restrição única em um índice hash.

  • Se houver um agrupamento na chave de índice, o MongoDB só poderá garantir a exclusividade se o agrupamento for simples.

  • Um índice único na chave de fragmentação impõe exclusividade em toda a combinação da chave, não nos componentes individuais da chave de fragmentação.

Importante

Os clusters fragmentados não impõem a restrição de exclusividade em campos _id no cluster quando o campo _id não é a chave de fragmento.

Se o campo _id não for a chave de fragmento, a restrição de exclusividade se aplicará somente ao fragmento que armazena o documento. Isso significa que dois ou mais documentos podem ter o mesmo valor de _id, desde que ocorram em fragmentos diferentes.

Por exemplo, considere uma coleção fragmentada com chave de fragmento {x: 1} que abranja dois fragmentos A e B. Como a chave _id não é a chave de fragmento, a coleção pode ter um documento com o valor _id 1 no fragmento A e outro documento com valor _id 1 no fragmento B.

Nos casos em que o campo _id não é a chave de fragmento, o MongoDB espera que os aplicativos garantam a exclusividade dos valores _id nos fragmentos, por exemplo, usando um identificador exclusivo para preencher o campo _id.

  • Identifique a chave fragmentada da coleção. Para visualizar a chave de fragmento de uma coleção fragmentada, execute o método sh.status() e localize a coleção no resultado.

  • 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 a seguir fragmenta a coleção accounts.names em region_id e impõe uma restrição exclusiva à combinação de region_id e email.

1

Crie o índice que você planeja usar como chave de fragmento:

db.names.createIndex( { region_id: 1 } )
region_id_1
2

Crie o índice único para a collection. Inclua a chave de fragmentação como prefixo do índice:

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

Para fragmentar a coleção, execute o método sh.shardCollection():

sh.shardCollection( "accounts.names", { region_id: 1 } )
{
collectionsharded: 'accounts.names',
ok: 1,
'$clusterTime': {
clusterTime: Timestamp( { t: 1759260515, i: 58 } ),
signature: {
hash: Binary.createFromBase64( 'AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0 ),
keyId: Long( '0' )
}
},
operationTime: Timestamp( { t: 1759260515, i: 57 } )
}

Se você fragmentar uma collection que contenha um índice único que não inclua a chave de shard como prefixo, o MongoDB retornará um erro ao executar o comandoshardCollection.