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

$set (estágio de agregação )

Observação

Desambiguação

The following page refers to the aggregation stage $set. For the update operator $set, see $set.

$set

Adiciona novos campos aos documentos. $set gera documentos que contêm todos os campos existentes dos documentos de entrada e novos campos adicionados.

The $set stage is an alias for $addFields.

Ambos os estágios são equivalentes a um estágio $project que especifica explicitamente todos os campos existentes nos documentos de entrada e adiciona os novos campos.

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

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
  • 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

$set tem o seguinte formato:

{ $set: { <newField>: <expression>, ... } }

Especifique o nome de cada campo a ser adicionado e defina seu valor como uma expressão de agregação ou um objeto vazio. Para mais informações sobre expressões, consulte Expressões.

Importante

Se o nome do novo campo for o mesmo de um nome de campo existente (incluindo _id), $set sobrescreve o valor existente desse campo com o valor da expressão especificada.

  • $set appends new fields to existing documents. You can include one or more $set stages in an aggregation operation.

  • $set aceita a incorporação de objetos onde você pode definir um valor para uma expressão de agregação ou para um objeto vazio. Por exemplo, os seguintes objetos aninhados são aceitos:

    {$set: { a: { b: { } } } }

    Para adicionar um campo ou campos a documentos incorporados (incluindo documentos em matrizes), use a notação de ponto. Consulte o exemplo.

  • To add an element to an existing array field with $set, use with $concatArrays. See example.

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

The following operation uses two $set stages to include three new fields in the output documents:

db.movies.aggregate( [
{ $match: { runtime: { $gt: 1000 } } },
{
$set: {
imdbScoreScaled: { $multiply: [ "$imdb.rating", 10 ] },
runtimeHours: {
$floor: { $divide: [ "$runtime", 60 ] }
}
}
},
{
$set: {
totalScore: {
$add: [ "$imdbScoreScaled", "$runtimeHours" ]
}
}
}
] )
[
{ _id: ..., title: 'Baseball', runtime: 1140, imdbScoreScaled: 91, runtimeHours: 19, totalScore: 110 },
{ _id: ..., title: 'Centennial', runtime: 1256, imdbScoreScaled: 85, runtimeHours: 20, totalScore: 105 }
]
...
Primeiro estágio ($set):
The first $set stage adds two fields: imdbScoreScaled, which multiplies the IMDB rating by 10, and runtimeHours, which divides the runtime by 60 and rounds down to the nearest integer.
Segundo estágio ($set):
The second $set stage adds totalScore, which sums imdbScoreScaled and runtimeHours computed in the previous stage.

Use a notação de pontos para adicionar novos campos a documentos incorporados.

A seguinte operação de agregação adiciona um novo campo normalizedRating ao documento incorporado imdb:

db.movies.aggregate( [
{ $match: { runtime: { $gt: 1000 } } },
{
$set: {
"imdb.normalizedRating": {
$multiply: [ "$imdb.rating", 10 ]
}
}
}
] )
[
{ _id: ..., title: 'Baseball', imdb: { '...': '...', normalizedRating: 91 } },
{ _id: ..., title: 'Centennial', imdb: { '...': '...', normalizedRating: 85 } }
]
...

Specifying an existing field name in a $set operation causes the original field to be replaced.

The following $set operation overrides the rated field:

db.movies.aggregate( [
{ $match: { title: "Baseball" } },
{ $set: { rated: "UNRATED" } }
] )
[
{ _id: ..., title: 'Baseball', rated: 'UNRATED' }
]
...

É possível substituir um campo por outro. No exemplo a seguir, o campo title substitui o campo _id.

A operação de agregação a seguir usa $set para substituir o campo _id de cada documento pelo valor do campo title e substitui o campo title pela string "movie":

db.movies.aggregate( [
{ $match: { runtime: { $gt: 1000 } } },
{ $set: { _id: "$title", title: "movie" } }
] )
[
{ _id: 'Baseball', title: 'movie' },
{ _id: 'Centennial', title: 'movie' }
]
...

You can use $set with a $concatArrays expression to add an element to an existing array field. The following operation uses $set to replace the genres field with a new array whose elements are the current genres array concatenated with another array containing a new genre [ "Classic" ]:

db.movies.aggregate( [
{ $match: { title: "Baseball" } },
{
$set: {
genres: {
$concatArrays: [ "$genres", [ "Classic" ] ]
}
}
}
] )
[
{ _id: ..., title: 'Baseball', genres: [ 'Documentary', 'History', 'Sport', 'Classic' ] }
]
...

A operação de agregação a seguir adiciona um novo campo titleWithYear a cada documento que concatena o título do filme com seu ano de lançamento:

db.movies.aggregate( [
{ $match: { runtime: { $gt: 1000 } } },
{
$set: {
titleWithYear: {
$concat: [
"$title",
" (",
{ $toString: "$year" },
")"
]
}
}
}
] )
[
{ _id: ..., title: 'Baseball', titleWithYear: 'Baseball (1994)' },
{ _id: ..., title: 'Centennial', titleWithYear: 'Centennial (1978)' }
]
...

Para saber mais sobre os estágios de pipeline relacionados, consulte o guia$addFields.