Intervalo de blocos e campos de chave de fragmentação ausentes
Os campos de chave de fragmento não preenchidos fazem parte da mesma faixa de parte das chaves de fragmento com valores nulos. Por exemplo, se a chave de fragmento estiver nos campos { x:
1, y: 1 }, então:
O documento não tem chave de fragmentação | Faz parte do mesmo intervalo que |
|---|---|
|
|
|
|
|
|
Operações de leitura/gravação e campos de chave de fragmentação ausentes
Para segmentar documents com campos de chave de fragmento não preenchidos, você pode usar a condição de filtro { $exists: false } nos campos de chave de fragmento. Por exemplo, se a chave de fragmento estiver nos campos { x: 1, y: 1
}, você poderá encontrar os documents com campos de chave de fragmento ausentes executando esta query:
db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } )
Se você especificar uma condição de filtro de igualdade nula (por exemplo, { x: null
}), o filtro corresponde tanto aos documentos com campos de chave de shard ausentes quanto àqueles com campos de chave de shard definidos como null.
Algumas operações de gravação, como uma gravação com uma especificação upsert, exigem uma correspondência de igualdade na chave de fragmentação. Nesses casos, para segmentar um documento que não tenha a chave de fragmentação, inclua outra condição de filtro além da correspondência de igualdade null. Por exemplo:
{ _id: <value>, <shardkeyfield>: null } // _id of the document missing shard key
Definir os campos de chave de fragmento ausentes
Se você tiver campos de chave de shard ausentes, poderá definir o campo de chave de shard como null. Se você quiser definir o campo de chave de shard ausente para um valor nãonull , consulte Alterar o valor da chave de shard de um documento.
Para realizar a atualização, você pode usar as seguintes operações em um mongos:
Comando | Método | Descrição |
|---|---|---|
update with multi: true |
| |
update with multi: false |
| |
| ||
|
Exemplo
Considere uma coleção sales fragmentada no campo location. Alguns documentos da coleção não possuem o campo location . Um campo ausente é considerado igual a um valor nulo para o campo. Para definir explicitamente esses campos como null, execute o seguinte comando:
db.sales.updateOne( { _id: 12345, location: null }, { $set: { location: null } } )
Ao definir campos de chave de fragmento ausentes com db.collection.updateOne() ou outro método que atualize explicitamente apenas um documento, a atualização deve atender a um dos seguintes requisitos:
o filtro da query contém uma condição de igualdade na chave de fragmento completa na query
o filtro da query contém uma correspondência exata em _id
a atualização tem como alvo um único fragmento