Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$map (agregação)

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Exemplos
  • Adicionar a cada elemento de uma array
  • Truncar cada elemento de array
  • Converta temperaturas Celsius em Fahrenheit
  • Saiba mais
$map

Aplica umaexpressão a cada item em uma array e retorna uma array com os resultados aplicados.

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

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações 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 $map tem a seguinte sintaxe:

{ $map: { input: <expression>, as: <string>, in: <expression> } }
Campo
Especificação
input
Uma expressão que se torna uma array.
as
Opcional. Um nome para a variável que representa cada elemento individual da array input. Se nenhum nome for especificado, o nome da variável padrão será this.
in
Uma expressão aplicada a cada elemento da array input . A expressão referencia cada elemento individualmente com o nome da variável especificado em as.

Para mais informações sobre expressões, consulte Operadores de Expressão.

No mongosh, crie uma coleção de amostra denominada grades com os seguintes documentos:

db.grades.insertMany( [
{ quizzes: [ 5, 6, 7 ] },
{ quizzes: [ ] },
{ quizzes: [ 3, 8, 9 ] }
] )

A seguinte operação de agregação usa $map com a expressão $add para incrementar cada elemento na array quizzes em 2.

db.grades.aggregate( [
{
$project: {
adjustedGrades: {
$map: {
input: "$quizzes",
as: "grade",
in: { $add: [ "$$grade", 2 ] }
}
}
}
}
] )

Essa operação retorna os seguintes resultados:

[
{
_id: ObjectId("6390b8f7237da390c6869a62"),
adjustedGrades: [ 7, 8, 9 ]
},
{
_id: ObjectId("6390b8f7237da390c6869a63"),
adjustedGrades: []
},
{
_id: ObjectId("6390b8f7237da390c6869a64"),
adjustedGrades: [ 5, 10, 11 ]
}
]

No mongosh, crie uma coleção de amostra denominada deliveries com os seguintes documentos:

db.deliveries.insertMany( [
{
"city" : "Bakersfield",
"distances" : [ 34.57, 81.96, 44.24 ]
},
{
"city" : "Barstow",
"distances" : [ 73.28, 9.67, 124.36 ]
},
{
"city" : "San Bernadino",
"distances" : [ 16.04, 3.25, 6.82 ]
}
] )

A operação de agregação a seguir usa $map para truncate cada elemento na array distances para seu inteiro.

db.deliveries.aggregate( [
{
$project: {
city: "$city",
integerValues: {
$map: {
input: "$distances",
as: "decimalValue",
in: { $trunc: "$$decimalValue" }
}
}
}
}
] )

Essa operação retorna os seguintes resultados:

[
{
_id: ObjectId("6390b9b1237da390c6869a65"),
city: 'Bakersfield',
integerValues: [ 34, 81, 44 ]
},
{
_id: ObjectId("6390b9b1237da390c6869a66"),
city: 'Barstow',
integerValues: [ 73, 9, 124 ]
},
{
_id: ObjectId("6390b9b1237da390c6869a67"),
city: 'San Bernadino',
integerValues: [ 16, 3, 6 ]
}
]

No mongosh, crie uma coleção de amostra denominada temperatures com os seguintes documentos:

db.temperatures.insertMany( [
{
"date" : ISODate("2019-06-23"),
"tempsC" : [ 4, 12, 17 ]
},
{
"date" : ISODate("2019-07-07"),
"tempsC" : [ 14, 24, 11 ]
},
{
"date" : ISODate("2019-10-30"),
"tempsC" : [ 18, 6, 8 ]
}
] )

A operação de agregação a seguir usa o estágio $addFields para adicionar um novo campo chamado tempsF aos documentos. Esse novo campo contém os equivalentes em Fahrenheit dos elementos do array tempsC. Para converter de Celsius para Fahrenheit, a operação usa $map para $multiply os valores Celsius por 9/5 e depois $add 32.

db.temperatures.aggregate( [
{
$addFields: {
"tempsF": {
$map: {
input: "$tempsC",
as: "tempInCelsius",
in: {
$add: [ { $multiply: [ "$$tempInCelsius", 9/5 ] }, 32 ]
}
}
}
}
}
] )

Essa operação retorna os seguintes resultados:

[
{
_id: ObjectId("6390ba11237da390c6869a68"),
date: ISODate("2019-06-23T00:00:00.000Z"),
tempsC: [ 4, 12, 17 ],
tempsF: [ 39.2, 53.6, 62.6 ]
},
{
_id: ObjectId("6390ba11237da390c6869a69"),
date: ISODate("2019-07-07T00:00:00.000Z"),
tempsC: [ 14, 24, 11 ],
tempsF: [ 57.2, 75.2, 51.8 ]
},
{
_id: ObjectId("6390ba11237da390c6869a6a"),
date: ISODate("2019-10-30T00:00:00.000Z"),
tempsC: [ 18, 6, 8 ],
tempsF: [ 64.4, 42.8, 46.4 ]
}
]

Para saber mais sobre as expressões usadas nos exemplos anteriores, consulte:

← $ltrim (agregação)