Docs Menu
Docs Home
/ /

$map (operador de expresión)

$map

Se aplica un expresión a cada elemento de una matriz y devuelve una matriz con los resultados aplicados.

Puedes usar $map para implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

La expresión $map tiene la siguiente sintaxis:

{ $map: { input: <expression>, as: <string>, in: <expression> } }
Campo
Especificación

input

Una expresión que se evalúa en un arreglo.

Si input se resuelve en null o hace referencia a un campo que falta, $map devuelve null.

Si input se resuelve en un valor que no es un arreglo ni nulo, el pipeline presenta errores.

as

Opcional. Un nombre para la variable que representa cada elemento individual del arreglo input. Si no se especifica un nombre, el nombre de la variable por defecto es this.

in

Una expresión que se aplica a cada elemento del arreglo input. La expresión hace referencia a cada elemento individualmente con el nombre de variable especificado en as.

Para obtener más información sobre las expresiones, consulta Expresiones.

En mongosh, cree una colección de muestra llamada grades con los siguientes documentos:

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

La siguiente operación de agregación utiliza $map con la expresión $add para incrementar cada elemento del arreglo quizzes en 2.

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

Esta operación devuelve los siguientes resultados:

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

En mongosh, cree una colección de muestra llamada deliveries con los siguientes 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 ]
}
] )

La siguiente operación de agregación usa $map para truncate cada elemento del arreglo distances a su valor entero.

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

Esta operación devuelve los siguientes 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 ]
}
]

En mongosh, cree una colección de muestra llamada temperatures con los siguientes 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 ]
}
] )

La siguiente operación de agregación utiliza la etapa $addFields para agregar un nuevo campo a los documentos llamado tempsF que contiene los equivalentes en Fahrenheit de los elementos del arreglo tempsC. Para convertir de Celsius a Fahrenheit, la operación utiliza $map para $multiply los valores en Celsius por 9/5 y, luego, $add 32.

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

Esta operación devuelve los siguientes 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 aprender más sobre las expresiones utilizadas en los ejemplos anteriores, consulte:

Volver

$ltrim

En esta página