Alterar o valor da chave de fragmentação de um documento
Nesta página
Você pode atualizar o valor da chave do shard de um documento, a menos que o campo chave do shard seja o campo imutável _id
.
Importante
Ao atualizar o valor chave do shard
Você deve estar em um
mongos
. Não emita a operação diretamente no shard.Você deve executar em uma transação ou como uma gravação que pode ser repetida.
Você deve incluir uma condição de igualdade na chave de shard completa no filtro de query. Por exemplo, considere uma coleção
messages
que utiliza{ activityid: 1, userid : 1 }
como a chave de shard. Para atualizar o valor chave do shard de um documento, você deve incluiractivityid: <value>, userid: <value>
no filtro de query. Você pode incluir campos adicionais na query conforme apropriado.
Consulte também o comando/métodos de gravação específicos para obter requisitos específicos de operação adicionais quando executados em uma coleção fragmentada.
Para atualizar um valor chave de shard, use as seguintes operações:
Comando | Método |
---|---|
atualizar com multi: false | Para definir como um valor não |
Para definir como um valor não | |
Se a modificação da chave do shard resultar na transferência do documento para outro shard, você não poderá especificar mais de uma modificação da chave do shard na operação em massa; o tamanho do lote deve ser 1. Se a modificação da chave de shard não resultar na movimentação do documento para outro shard, você poderá especificar várias modificações de chave de shard na operação em massa. Para definir como um valor diferente de |
Aviso
Os documentos em coleções fragmentadas podem não ter os campos chave de fragmentado. Tome cuidado para evitar remover acidentalmente a chave de fragmento ao alterar o valor dela em um documento.
Exemplo
Considere uma coleção sales
fragmentada no campo location
. A coleção contém um documento com o _id
12345
e o location
""
. Para atualizar o valor do campo para este documento, você pode executar o seguinte comando:
db.sales.updateOne( { _id: 12345, location: "" }, { $set: { location: "New York"} } )