Menu Docs
Página inicial do Docs
/ /

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

Observação

Desambiguação

A página a seguir se refere ao estágio de agregação $set. Para o operador de atualização $set, consulte $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.

O estágio $set é um alias para $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: 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

$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 anexa novos campos a documentos existentes. Você pode incluir um ou mais estágios $set em uma operação de agregação.

  • $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.

  • Para adicionar um elemento a um campo de array existente com $set, utilize com $concatArrays. Veja o exemplo.

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.

A operação a seguir usa dois estágios $set para incluir três novos campos nos documentos de saída:

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):
O primeiro estágio adiciona dois $set campos:, imdbScoreScaled que multiplica a classificação do IMDB 10 por, e,runtimeHours que divide o tempo de execução por 60 e arredonda para baixo para o número inteiro mais próximo.
Segundo estágio ($set):
O segundo $set estágio totalScore adiciona, que soma imdbScoreScaled e runtimeHours calculados no estágio anterior.

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 } }
]
...

A especificação de um nome de campo existente em uma operação $set faz com que o campo original seja substituído.

A seguinte operação $set substitui o campo rated:

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 seguinte operação de agregação utiliza $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' }
]
...

Você pode usar$setcom uma expressão$concatArrayspara adicionar um elemento a um campo de array existente. A operação a seguir usa$setpara substituir o campo genres por uma nova array cujos elementos são a array genres atual concatenada com outra array contendo um novo gênero [ "Classic" ]:

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

A seguinte operação de agregação 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)' }
]
...

Os exemplos de C# nesta página utilizam o banco de dados sample_mflix a partir dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de exemplo, consulte Introdução na documentação do driver MongoDB .NET/C#.

A seguinte classe Movie modela os documentos na collection sample_mflix.movies:

[BsonIgnoreExtraElements]
public class Movie
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("title")]
public string Title { get; set; } = null!;
[BsonElement("year")]
public int? Year { get; set; }
[BsonElement("runtime")]
public int? Runtime { get; set; }
[BsonElement("rated")]
public string? Rated { get; set; }
[BsonElement("metacritic")]
public int Metacritic { get; set; }
[BsonElement("plot")]
public string? Plot { get; set; }
[BsonElement("type")]
public string? Type { get; set; }
[BsonElement("cast")]
public string[]? Cast { get; set; }
[BsonElement("directors")]
public string[]? Directors { get; set; }
[BsonElement("writers")]
public string[]? Writers { get; set; }
[BsonElement("imdb")]
public ImdbData? Imdb { get; set; }
}

Para usar o driver MongoDB .NET/C# para adicionar um estágio $set a um pipeline de agregação, chame o método Set() em um objeto PipelineDefinition.

O exemplo a seguir cria um estágio de pipeline que corresponde ao documento Movie com o título "The Godfather" e define seu campo Rated como "UNRATED":

var pipeline = new EmptyPipelineDefinition<Movie>()
.Match(Builders<Movie>.Filter.Eq(m => m.Title, "The Godfather"))
.Set(Builders<Movie>.SetFields.Set(m => m.Rated, "UNRATED"));
{ "_id" : "...", "title" : "The Godfather", "runtime" : 175, "rated" : "UNRATED", "metacritic" : 100 }

Os exemplos do Node.js nesta página utilizam o banco de dados do sample_mflix a partir dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de exemplo, consulte Introdução na documentação do driver do MongoDB Node.js

Para usar o driver Node.js do MongoDB para adicionar um estágio $set a um pipeline de agregação , use o operador $set em um objeto de pipeline.

O exemplo a seguir cria um estágio de pipeline que define o valor do campo lastupdated em cada documento movie como o valor do objeto Date. O exemplo em seguida executa o pipeline de agregação:

const pipeline = [{ $set: { lastupdated: new Date() } }];
const cursor = collection.aggregate(pipeline);
return cursor;

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

Voltar

$searchMeta

Nesta página