注册

详解MongoDB的map()函数:执行 Map 操作

MongoDB map()函数的作用与使用方法

Map函数的作用

在MongoDB中,$map操作符将一个输入数组的每个元素传递给子表达式,然后返回一个新的数组,其中每个元素都是子表达式的结果。可以使用$map操作符在聚合管道中操作嵌套数组并对其进行操作。

Map函数的语法

$map函数的语法如下:

{ $map: {
         input: ,//输入数组
         as: ,//定义对数组中每个元素的访问方式
         in: //表达式
       }
}
  • input:表示要操作的数组
  • as:表示用于访问输入数组中每个元素的变量名称
  • in:返回每个元素的表达式

Map函数的使用方法

下面是一个MongoDB Map函数的用法示例:

示例一:

假设我们有以下student集合,里面包含学生的姓名和科目成绩:

{'name':'Jack','score':[60,80,90]},
{'name':'Lucy','score':[70,80,90]},
{'name':'Lily','score':[80,90,100]},
{'name':'Tom','score':[90,90,90]},

我们现在要统计每个学生的平均成绩,使用map函数可以很方便实现,代码如下:

db.student.aggregate([
   {
      $project:{
         name:1,
         avg: {
            $avg:{
               $map:{
                  input:"$score",
                  as:"s",
                  in:"$$s"
               }
            }
         }
      }
   }
])

运行该代码后,我们能在控制台看到以下结果:

{ "_id" : ObjectId("60c4a64d8d78bb1db2af73cb"), "name" : "Jack", "avg" : 76.66666666666667 }
{ "_id" : ObjectId("60c4a64d8d78bb1db2af73cc"), "name" : "Lucy", "avg" : 80 }
{ "_id" : ObjectId("60c4a64d8d78bb1db2af73cd"), "name" : "Lily", "avg" : 90 }
{ "_id" : ObjectId("60c4a64d8d78bb1db2af73ce"), "name" : "Tom", "avg" : 90 }

结果表明我们取得了正确的平均值。

示例二:

假设我们有以下parking集合,里面包含停车场的地址和车辆记录:

{
    "_id" : ObjectId("60c4a8ba8d78bb1db2af73d4"),
    "address" : "Shanghai",
    "cars":[
        {"name":"BMW", "price":500000},
        {"name":"Audi","price":400000},
        {"name":"Mercedes","price":600000}
    ]
},
{
    "_id" : ObjectId("60c4a8ba8d78bb1db2af73d5"),
    "address" : "Beijing",
    "cars":[
        {"name":"Ford", "price":250000},
        {"name":"Chevy","price":300000}
    ]
}

我们现在要统计每个停车场车辆总价值,使用map函数可以很方便实现,代码如下:

db.parking.aggregate([
   {
      $project:{
         address:1,
         totalValue: {
            $reduce:{
                input: "$cars",
                initialValue: 0,
                in: { $add: ["$$value", "$$this.price"]}
            }
         }
      }
   }
])

运行该代码后,我们能在控制台看到以下结果:

{ "_id" : ObjectId("60c4a8ba8d78bb1db2af73d4"), "address" : "Shanghai", "totalValue" : 1500000 }
{ "_id" : ObjectId("60c4a8ba8d78bb1db2af73d5"), "address" : "Beijing", "totalValue" : 550000 }

结果表明我们取得了正确的总价值。

总结

本篇文章介绍了MongoDB map()函数的作用与语法,并提供了两个实例进行演示。通过这些示例,我们可以更好的理解map函数在聚合管道中的使用方法。