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

refineCollectionShardKey (comando de banco de dados)

refineCollectionShardKey

Modifica a chave de fragmento da coleção adicionando novo(s) campo(s) como sufixo à chave existente. O refinamento da shard key de uma collection pode resolver situações em que a chave existente levou a parte jumbo (ou seja, indivisíveis) devido à cardinalidade insuficiente.

Observação

Distribuição de dados

As part of refining the shard key, the refineCollectionShardKey command updates the chunk ranges and zone ranges to incorporate the new fields without modifying the range values of the existing key fields. That is, the refinement of the shard key does not immediately affect the distribution of chunks across shards or zones. Any future chunk splits or migration occur as part of the routine sharding operations.

Esse comando está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

Importante

This command is not supported in M10+ clusters. For more information, see Unsupported Commands.

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

Observação

To use the refineCollectionShardKey command, the sharded cluster must have feature compatibility version (fcv) of 4.4.

O comando tem a seguinte sintaxe:

db.adminCommand(
{
refineCollectionShardKey: "<database>.<collection>",
key: { <existing key specification>, <suffix1>: <1|"hashed">, ... }
}
)

O comando utiliza os seguintes campos:

Campo
Tipo
Descrição

string

O namespace da collection fragmentada no formato "<database>.<collection>".

documento

O documento que especifica o campo ou campos a serem usados como a nova chave de fragmento para a collection.

{ <existing key specification>, <suffix1>: <1|"hashed">, ... }

  • A nova chave deve começar com a chave de fragmento existente.

  • The new key must be supported by an index that must exist before you run the refineCollectionShardKey command. See Index Considerations for more information.

Para os campos de sufixo, defina os valores do campo como:

Ao executar com controle de acesso, o usuário deve ter a ação de privilégio do refineCollectionShardKey no reconhecimento de data center e/ou collection para executar o comando. Ou seja, um usuário deve ter uma role que conceda o seguinte privilégio:

{ resource: { db: <database>, collection: <collection> }, actions: [ "refineCollectionShardKey" ] }

O papel do clusterManager embutido fornece os privilégios apropriados.

  • Existência do Índice

    Um índice que suporta a chave especificada do comando deve existir antes de executar o comando.

    Um índice de suporte é um índice que começa com a nova especificação da chave de shard; ou seja, o prefixo do índice corresponde à nova especificação da chave de shard. Ou seja, para alterar a chave de shard de { x: 1, y: 1 } de { x: 1 }, e o índice que começa com { x: 1, y: 1 } deve existir; por exemplo

    • { x: 1, y: 1 }

    • { x: 1, y: 1, a: 1, b: 1}

    Observação

    • O índice de suporte não pode ser um índice parcial.

    • O índice de suporte não pode ser um índice esparso.

    • Se a collection usar um agrupamento nãosimple , o índice de suporte deverá especificar o agrupamento { locale: "simple" } .

  • índice único

    Se o índice de fragmento atual tiver uma restrição de exclusividade, o novo índice da chave de fragmento também deverá ter uma restrição exclusiva.

    After creating the unique index to support the new shard key, drop the old shard key index before running refineCollectionShardKey.

    Além disso, se o índice de fragmento atual tiver uma restrição exclusiva, a nova chave de fragmento não poderá especificar "hashed" para nenhum de seus campos.

    Consulte também collection e índice único.

  • Agrupamento de Índices
    Se a collection fragmentada tiver um agrupamento padrão nãosimple , o índice deverá incluir um documento de agrupamento com { locale : "simple" }. Pelo menos um dos índices cujos campos suportam o padrão de chave de fragmento deve ter o agrupamento simples.

Aviso

Não modifique o intervalo ou o tipo de hash de nenhum dos campos de chave de fragmento atuais. Isso causa inconsistências de dados. Por exemplo, não modifique uma chave de fragmento de { customer_id: 1 } para { customer_id: "hashed", order_id: 1 }.

Para configurar o exemplo no reconhecimento de data center do test :

  1. Utilize a seguinte operação do para fragmentar shardCollection a orders collection do no test reconhecimento de data center do . A operação usa o campo customer_id como a chave de fragmento inicial:

    db.adminCommand( { shardCollection: "test.orders", key: { customer_id: 1 } } )

Para modificar a chave de fragmento para ser o campo customer_id e o campo order_id { customer_id: 1, order_id: 1 },

  1. Create the index para dar suporte à nova chave de shard se o índice ainda não existir.

    db.getSiblingDB("test").orders.createIndex( { customer_id: 1, order_id: 1 } )
  2. Run refineCollectionShardKey command to add the order_id field as a suffix:

    db.adminCommand( {
    refineCollectionShardKey: "test.orders",
    key: { customer_id: 1, order_id: 1 }
    } )

Após a conclusão bem-sucedida do comando, a chave de fragmento da collection foi alterada para { customer_id: 1, order_id: 1 }. Para verificar, você pode executar sh.status().

Dica

Depois de refinar a chave de fragmento, pode ser que nem todos os documents na coleção tenham os campo de sufixo. Para preencher o(s) campo(s) de chave de fragmento ausente(s), consulte Definir campos de chave de fragmento ausente.

Antes de refinar a chave de fragmento, certifique-se de que todos ou a maioria dos documentos na coleção tenham os campos de sufixo, se possível, para evitar a necessidade de preencher o campo posteriormente.

Para configurar o exemplo no reconhecimento de data center do test :

  1. Crie a collection cafés no reconhecimento de data center test , especificando o fr francês como o agrupamento padrão.

    db.getSiblingDB("test").createCollection( "cafés", { collation: { locale: "fr" } } );
  2. Fragmente a coleta usando o campo customer_id como a chave de fragmento inicial. Como a collection tem um agrupamento fr padrão e não um agrupamento simple , o comando shardCollection deve incluir uma opção collation: { locale: "simple" } :

    db.adminCommand( {
    shardCollection: "test.cafés",
    key: { customer_id: 1 },
    collation: { locale: "simple" }
    } )

Para modificar a chave de fragmento para ser o campo customer_id e o campo order_id { customer_id: 1, order_id: 1 },

  1. Create the index para dar suporte à nova chave de shard, se o índice ainda não existir. Como a collection usa um agrupamento não simples, o índice deve incluir a opção collation: { locale: "simple" } .

    db.getSiblingDB("test").cafés.createIndex(
    { customer_id: 1, order_id: 1 },
    { collation: { locale: "simple" } }
    )
  2. Run refineCollectionShardKey command to add the order_id field as a suffix:

    db.adminCommand( {
    refineCollectionShardKey: "test.cafés",
    key: { customer_id: 1, order_id: 1 }
    } )

Após a conclusão bem-sucedida do comando, a chave de fragmento da collection foi alterada para { customer_id: 1, order_id: 1 }. Para verificar, você pode executar sh.status().

Dica

Depois de refinar a chave de fragmento, pode ser que nem todos os documents na coleção tenham os campo de sufixo. Para preencher o(s) campo(s) de chave de fragmento ausente(s), consulte Definir campos de chave de fragmento ausente.

Antes de refinar a chave de fragmento, certifique-se de que todos ou a maioria dos documentos na coleção tenham os campos de sufixo, se possível, para evitar a necessidade de preencher o campo posteriormente.