$map (aggregation)
On this page本页内容
Definition定义
$map
-
Applies an expression to each item in an array and returns an array with the applied results.将表达式应用于数组中的每个项,并返回具有应用结果的数组。The$map
expression has the following syntax:$map
表达式具有以下语法:{ $map: { input: <expression>, as: <string>, in: <expression> } }
Field字段Specification规范文档input
An expression that resolves to an array.解析为数组的表达式。as
Optional.可选的。A name for the variable that represents each individual element of the变量的名称,表示输入数组的每个单独元素。input
array.If no name is specified, the variable name defaults to如果未指定名称,则变量名称默认为this
.this
。in
An expression that is applied to each element of the应用于input
array.input
数组的每个元素的表达式。The expression references each element individually with the variable name specified in表达式使用as
.as
中指定的变量名分别引用每个元素。For more information on expressions, see Expressions.有关表达式的详细信息,请参阅表达式。
Examples实例
Add to Each Element of an Array添加到数组的每个元素
In 在mongosh
, create a sample collection named grades
with the following documents:mongosh
中,使用以下文档创建一个名为grades
的示例集合:
db.grades.insertMany( [
{ quizzes: [ 5, 6, 7 ] },
{ quizzes: [ ] },
{ quizzes: [ 3, 8, 9 ] }
] )
The following aggregation operation uses 下面的聚合操作使用$map
with the $add
expression to increment each element in the quizzes
array by 2
.$map
和$add
表达式将quizzes
数组中的每个元素递增2
。
db.grades.aggregate( [
{
$project: {
adjustedGrades: {
$map: {
input: "$quizzes",
as: "grade",
in: { $add: [ "$$grade", 2 ] }
}
}
}
}
] )
This operation returns the following results:此操作返回以下结果:
[
{
_id: ObjectId("6390b8f7237da390c6869a62"),
adjustedGrades: [ 7, 8, 9 ]
},
{
_id: ObjectId("6390b8f7237da390c6869a63"),
adjustedGrades: []
},
{
_id: ObjectId("6390b8f7237da390c6869a64"),
adjustedGrades: [ 5, 10, 11 ]
}
]
Truncate Each Array Element截断每个数组元素
In 在mongosh
, create a sample collection named deliveries
with the following documents:mongosh
中,使用以下文档创建一个名为deliverys
的示例集合:
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 ]
}
] )
The following aggregation operation uses 以下聚合操作使用$map
to truncate
each element in the distances
array to its integer.$map
将distance
数组中的每个元素截断为其整数。
db.deliveries.aggregate( [
{
$project: {
city: "$city",
integerValues: {
$map: {
input: "$distances",
as: "decimalValue",
in: { $trunc: "$$decimalValue" }
}
}
}
}
] )
This operation returns the following results:此操作返回以下结果:
[
{
_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 ]
}
]
Convert Celsius Temperatures to Fahrenheit将摄氏温度转换为华氏温度
In 在mongosh
, create a sample collection named temperatures
with the following documents:mongosh
中,使用以下文档创建一个名为temperatures
的样本集合:
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 ]
}
] )
The following aggregation operation uses the 以下聚合操作使用$addFields
stage to add a new field to the documents called tempsF
which contains Fahrenheit equivalents of the elements in the tempsC
array. $addFields
阶段向名为tempsF
的文档添加一个新字段,该字段包含tempsC
数组中元素的华氏当量。To convert from Celsius to Fahrenheit, the operation uses 要从摄氏度转换为华氏度,该操作使用$map
to $multiply
the Celsius values by 9/5
and then $add
32
.$map
将摄氏度值乘以9/5
,然后加上32
。
db.temperatures.aggregate( [
{
$addFields: {
"tempsF": {
$map: {
input: "$tempsC",
as: "tempInCelsius",
in: {
$add: [ { $multiply: [ "$$tempInCelsius", 9/5 ] }, 32 ]
}
}
}
}
}
] )
This operation returns the following results:此操作返回以下结果:
[
{
_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 ]
}
]
Learn More了解更多信息
To learn more about expressions used in the previous examples, see:要了解有关前面示例中使用的表达式的更多信息,请参阅: