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函数在聚合管道中的使用方法。