$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规格
inputAn expression that resolves to an array.解析为数组的表达式
asOptional. 可选。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
inAn expression that is applied to each element of the input array. 应用于输入数组的每个元素的表达式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 using $map使用$map添加到数组的每个元素

In mongosh, create a sample collection named grades with the following documents:mongosh中,使用以下文档创建名为grades的样本集合:

db.grades.insertMany([
  { _id: 1, quizzes: [ 5, 6, 7 ] },
  { _id: 2, quizzes: [ ] },
  { _id: 3, 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表达式将quezzes数组中的每个元素递增2

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

This operation returns the following results:此操作返回以下结果:

{ "_id" : 1, "adjustedGrades" : [ 7, 8, 9 ] }
{ "_id" : 2, "adjustedGrades" : [ ] }
{ "_id" : 3, "adjustedGrades" : [ 5, 10, 11 ] }

Truncate each array element with $map使用$map截断每个数组元素

In mongosh, create a sample collection named deliveries with the following documents:mongosh中,创建一个名为deliveries的示例集合,其中包含以下文档:

db.deliveries.insertMany([
  { "_id" : 1, "city" : "Bakersfield", "distances" : [ 34.57, 81.96, 44.24 ] },
  { "_id" : 2, "city" : "Barstow", "distances" : [ 73.28, 9.67, 124.36 ] },
  { "_id" : 3, "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.以下聚合操作使用$mapdistances数组中的每个元素截断为其整数。

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

This operation returns the following results:此操作返回以下结果:

{ "_id" : 1, "city" : "Bakersfield", "integerValues" : [ 34, 81, 44 ] }
{ "_id" : 2, "city" : "Barstow", "integerValues" : [ 73, 9, 124 ] }
{ "_id" : 3, "city" : "San Bernadino", "integerValues" : [ 16, 3, 6 ] }

Convert Celsius Temperatures to Fahrenheit Using $map使用$map将摄氏温度转换为华氏温度

In mongosh, create a sample collection named temperatures with the following documents:mongosh中,使用以下文档创建名为temperatures的样本集合:

db.temperatures.insertMany([
  { "_id" : 1, "date" : ISODate("2019-06-23"), "tempsC" : [ 4, 12, 17 ] },
  { "_id" : 2, "date" : ISODate("2019-07-07"), "tempsC" : [ 14, 24, 11 ] },
  { "_id" : 3, "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将摄氏度值$multiply乘以9/5,然后$add加上 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" : 1, "date" : ISODate("2019-06-23T00:00:00Z"), "tempsC : [ 4, 12, 17 ], "tempsF" : [ 39.2, 53.6, 62.6 ] }
{ "_id" : 2, "date" : ISODate("2019-07-07T00:00:00Z"), "tempsC" : [ 14, 24, 11 ], "tempsF" : [ 57.2, 75.2, 51.8 ] }
{ "_id" : 3, "date" : ISODate("2019-10-30T00:00:00Z"), "tempsC" : [ 18, 6, 8 ], "tempsF" : [ 64.4, 42.8, 46.4 ] }
Tip提示
See also: 参阅:
←  $ltrim (aggregation)$max (aggregation) →