As coleções fragmentadas exigem um índice que ofereça suporte à chave de fragmento. O índice pode ser um índice na chave de fragmentação ou um índice composto , onde a chave de fragmentação é um prefixo do índice.
Se a collection estiver vazia,
sh.shardCollection()cria o índice na chave de shard, se esse índice ainda não existir.Se a collection não estiver vazia, é necessário criar o índice antes de usar
sh.shardCollection().Se você refragmentar uma collection usando
sh.reshardCollection(), não precisará criar o índice na nova chave de fragmento com antecedência. A operação de refragmentação cria automaticamente os índices necessários. Para aprender mais, consulte o procedimento Refragmentar uma coleção.
Você não pode descartar ou ocultar um índice se ele for o único índice não oculto compatível com a chave de fragmentação.
A partir do MongoDB 7.0.3, 6.0.12 e 5.0.22, você pode descartar o índice de uma chave de fragmento com hash. Para obter mais informações, consulte Descartar um índice de chave de fragmento com hash.
Unique Indexes
O MongoDB pode forçar uma restrição de exclusividade em um índice de chave de fragmento à distância. O uso de um índice único na chave de fragmento força a exclusividade em toda a combinação da chave, e não em componentes individuais da chave de fragmento.
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_idcampo não for a chave de fragmento.
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.
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 exclusivo armazena um valor nulo de um documento que não tem o campo indexado; ou seja, um campo com índice não preenchido é tratado como outra instância de um valor
nullpara a chave de índice. Para obter mais informações, consulte Campo de documento ausente em um índice exclusivo de campo único.
Para impor singularidade nos valores de chave de fragmentação, passe o parâmetro unique como true para o método sh.shardCollection():
Se a collection estiver vazia,
sh.shardCollection()cria o índice exclusivo na chave de fragmentação se tal índice ainda não existir.Se a collection não estiver vazia, é necessário criar o índice antes de usar
sh.shardCollection().
Embora possa existir um índice composto exclusivo onde a chave de fragmentação é um prefixo, se você utilizar o parâmetro unique, a collection deverá ter um índice exclusivo que esteja na chave de fragmentação.
Você não pode especificar uma restrição única em um índice hash.
Para manter a exclusividade em um campo que não é sua chave de shard, consulte Restrições únicas em campos arbitrários.