$map (agregação)
Nesta página
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 |
---|---|
input | Uma expressão que se torna uma array. Se Se |
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.
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: