Menu Docs
Página inicial do Docs
/ /

$set (operador de atualização)

Observação

Desambiguação

A página a seguir refere-se ao operador de atualização $set. Para o estágio de agregação, consulte $set.

$set

O operador $set substitui o valor de um campo pelo valor especificado.

Você pode utilizar o $set para implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

  • 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

A expressão do operador $set tem o seguinte formato:

{ $set: { <field1>: <value1>, ... } }

Para especificar um <field> em um documento incorporado ou em uma array, use a notação de ponto.

A partir do MongoDB 5.0, os operadores de atualização processam campos de documento com nomes baseados em cadeia de caracteres em ordem lexicográfica. Os campos com nomes numéricos são processados em ordem numérica. Consulte Atualizar Comportamento de Operadores para detalhes.

Se o campo não existir, $set adiciona um novo campo com o valor especificado se o novo campo não violar uma restrição de tipo. Se você especificar um caminho pontilhado para um campo inexistente, $set criará os documentos incorporados conforme necessário para preencher o caminho pontilhado para o campo.

Se você especificar vários pares campo-valor, $set atualizará ou criará cada campo.

A partir do MongoDB 5.0, mongod não gera mais um erro ao usar um operador de atualização como $set com uma expressão de operando vazia ( { } ). Uma atualização vazia não resulta em alteração e nenhuma entrada no oplog é criada (o que significa que é sem operação).

O operador $set oferece as seguintes vantagens em comparação com a substituição completa do documento :

  • Atualizações Direcionadas: $set modifica somente os campos especificados, garantindo atualizações eficientes, evitando gravações e sobrecarga desnecessárias quando você trabalha com documentos grandes.

  • Entradas eficientes do Oplog: $set otimiza a replicação gravando apenas os campos atualizados no oplog em vez de todo o documento. Esse processo reduz o tamanho das entradas de oplog e permite que os nós repliquem as alterações com mais eficiência.

  • Lógica simplificada: os aplicativos que usam o $set não precisam calcular campos alterados antes de enviar uma atualização. O MongoDB reduz a complexidade ao lidar com a computação delta internamente.

Os exemplos nesta página usam dados do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.

O exemplo a seguir usa o operador $set para adicionar os campos label e status ao documento de filme correspondente:

db.movies.updateOne(
{ title: "The Dark Knight" },
{
$set: {
label: "Award Winner",
status: "classic"
}
}
)

A operação retorna o seguinte resultado:

{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

O exemplo a seguir usa a notação de ponto para atualizar o campo highlight do documento incorporado imdb no filme correspondente:

db.movies.updateOne(
{ title: "The Dark Knight" },
{ $set: { "imdb.highlight": "Critics' Choice" } }
)

A operação retorna o seguinte resultado:

{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

Importante

O exemplo anterior usa a notação de ponto para atualizar o campo highlight do documento incorporado imdb. O formato a seguir, em vez disso, substitui todo o documento incorporado, removendo todos os outros campos de imdb:

db.movies.updateOne(
{ title: "The Dark Knight" },
{ $set: { imdb: { highlight: "Critics' Choice" } } }
)

O exemplo a seguir usa o operador $set para atualizar o primeiro elemento (array índice 0) do array genres no documento de filme correspondente:

db.movies.updateOne(
{ title: "The Dark Knight" },
{ $set: { "genres.0": "Thriller" } }
)

A operação retorna o seguinte resultado:

{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

Para operadores de atualização adicionais para arrays, consulte Operadores de atualização de array.

Dica

Voltar

$renomear

Nesta página