Definição
- $map
- Aplica uma expressão a cada item em uma array e retorna uma array com os resultados aplicados. 
Compatibilidade
Você pode utilizar o $map 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 
Sintaxe
A expressão $map tem a seguinte sintaxe:
{ $map: { input: <expression>, as: <string>, in: <expression> } } 
| Campo | Especificação | 
|---|---|
| 
 | Uma expressão que se torna uma array. Se  Se  | 
| 
 | Opcional. Um nome para a variável que representa cada elemento individual da array  | 
| 
 | Uma expressão aplicada a cada elemento da array  | 
Para mais informações sobre expressões, consulte Expressões.
Exemplos
Adicionar a cada elemento de uma array
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 ]   } ] 
Truncar cada elemento de array
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 ]   } ] 
Converta temperaturas Celsius em Fahrenheit
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 ]   } ] 
Saiba mais
Para saber mais sobre as expressões usadas nos exemplos anteriores, consulte: