Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Menu Docs
Página inicial do Docs
/ /

Definir 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

{ x: "hello" }

{ x: "hello", y: null }

{ y: "goodbye" }

{ x: null, y: "goodbye" }

{ z: "oops" }

{ x: null, y: null }

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

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
  • Pode ser usado para definir o valor da chave ausente somente para null.

  • Pode ser executado dentro ou fora de uma transação.

  • Pode ser executada como uma gravação repetível ou não.

  • Para obter requisitos adicionais, consulte o comando/método específico.

update with
multi: false
  • Pode ser usado para definir o valor da chave ausente para null ou qualquer outro valor.

  • A atualização para definir campos de chave de fragmento ausentes 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

  • Para definir como um valor diferente denull, consulte Alterar o valor da chave de fragmento de um documento.

  • Para obter requisitos adicionais, consulte o comando/método específico.

  • Pode ser usado para definir o valor da chave ausente para null ou qualquer outro valor.

  • Ao definir campos de chave de fragmento ausentes com um método que atualiza 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

  • Os valores de chave ausentes são retornados quando correspondem a null. Para evitar a atualização de um valor de chave que é null, inclua condições de query adicionais, conforme apropriado.

  • Para definir como um valor diferente denull, consulte Alterar o valor da chave de fragmento de um documento.

  • Para obter requisitos adicionais, consulte o comando/método específico.

  • Para definir como um valor null , você pode especificar várias modificações da chave de shard na operação em massa.

  • Ao definir campos de chave de fragmento ausentes com um método que atualiza 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

  • Para definir como um valor diferente denull, consulte Alterar o valor da chave de fragmento de um documento.

  • Para obter requisitos adicionais, consulte o comando/método subjacente.

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

Voltar

Alterar valor da chave de shard

Nesta página