当前位置: 首页 > news >正文

MongoDB聚合运算符:$map

文章目录

    • 语法
    • 举例
      • 对数组元素取整
      • 将摄氏度转为华氏度

$map聚合运算符将指定的表达式应用于数组元素,对数组每个元素进行计算并返回计算后的数组。

语法

{ $map: { input: <expression>, as: <string>, in: <expression> } }

参数说明:

  • input:可解析为数组的表达式。
  • as:可选参数,数组元素的变量名,可以在表达式中引用,如果没有指定变量名,缺省用this指代。
  • in:应用于数组元素的表达式,表达式会单独针对数组的每个元素进行计算,可以使用as指定的变量名来指代数组元素。

举例

使用下面的脚本创建grades集合:

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

下面的聚合操作使用$map$add对数组quizzes的每个元素加2:

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

操作返回下面的结果:

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

对数组元素取整

使用下面的脚本创建deliveries集合:

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 ]}
] )

下面的聚合操作使用$maptruncate对数组distances的每个元素进行取整:

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

操作返回下面的结果:

[{_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 ]}
]

将摄氏度转为华氏度

使用下面的脚本创建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 ]}
] )

下面的聚合操作使用$addFields阶段向tempsF文档添加一个新字段,其中包含tempsC数组中元素的华氏度等效值,为了将摄氏温度转换为华氏温度,使用$map$multiply将摄氏度乘以9/5然后使用$add加上32

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

操作返回下面的结果:

[{_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 ]}
]

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AJAX —— 学习(一)
  • Leetcode56_合并区间
  • 21. 面试指导-高频面试题详解
  • 一次部署,多处运行:Docker容器化开发
  • Java 处理Mysql获取树形的数据
  • SpringBoot多级多模块聚合项目下maven打包报‘packaging‘ with value ‘jar‘ is invalid.
  • 图书馆自助借书机怎么借书
  • Bash相关
  • Mysql安装(命令方式安装)
  • 基于深度学习的电动自行车头盔佩戴检测系统
  • 06-User Login
  • 一文搞懂从爬楼梯到最小花费(力扣70,746)
  • 语义分割交互式智能标注工具 | 澳鹏数据标注平台
  • LangChain - OpenGPTs
  • GO - 泛型编程
  • EOS是什么
  • javascript 总结(常用工具类的封装)
  • node学习系列之简单文件上传
  • pdf文件如何在线转换为jpg图片
  • Python打包系统简单入门
  • Quartz初级教程
  • Vue组件定义
  • 闭包,sync使用细节
  • 创建一种深思熟虑的文化
  • 复杂数据处理
  • 前端面试之CSS3新特性
  • 如何进阶一名有竞争力的程序员?
  • 如何利用MongoDB打造TOP榜小程序
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 双管齐下,VMware的容器新战略
  • 思考 CSS 架构
  • 微服务入门【系列视频课程】
  • 用jQuery怎么做到前后端分离
  • mysql面试题分组并合并列
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #Z2294. 打印树的直径
  • (1)Hilt的基本概念和使用
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (第27天)Oracle 数据泵转换分区表
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (一)认识微服务
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .a文件和.so文件
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net core Redis 使用有序集合实现延迟队列
  • .net core 的缓存方案
  • .NET 药厂业务系统 CPU爆高分析
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)