MongoDB聚合运算符:$map

news/2024/4/29 17:50:36

文章目录

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/11550.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

浅聊什么是Redis?

需求&#xff1a;MySQL面临大量的查询&#xff0c;即读写操作&#xff0c;因此类比CPU&#xff0c;给数据加缓存&#xff0c;Redis诞生。应用程序从MySQL查询的数据&#xff0c;在Redis设置缓存&#xff08;记录在内存中&#xff0c;无需IO操作&#xff09;&#xff0c;后再需要…

【Linux实验室】NFS、DHCP的搭建

NFS、DHCP的搭建 1、nfs服务搭建及测试什么是NFS&#xff1f;环境准备服务端机器安装nfs-utils和rpcbind包启动NFS服务创建/data/NFSdata目录&#xff0c;配置nfs文件启动服务挂载测试在服务端在共享目录下创建文件测试在客户端在共享目录下创建文件 2、dhcp服务搭建及测试什么…

零代码编程:用kimichat将PDF自动批量分割成多个图片

有一个PDF文件&#xff0c;现在想把pdf文件转换成图片&#xff0c; 可以在kimichat中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个将PDF文件自动批量分割成多个图片的任务&#xff0c;具体步骤如下&#xff1a; 打开d盘下的pdf文件&#xff1a;Ill …

通过mapreduce程序统计旅游订单(wordcount升级版)

通过mapreduce程序统计旅游订单&#xff08;wordcount升级版&#xff09; 本文将结合一个实际的MapReduce程序案例&#xff0c;探讨如何通过分析旅游产品的预订数据来揭示消费者的偏好。 程序概览 首先&#xff0c;让我们来看一下这个MapReduce程序的核心代码。这个程序的目…

链表面试题

删除链表中等于给定值 val 的所有节点 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ …

VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程

引言劝退 VSCode&#xff0c;全称为Visual Studio Code&#xff0c;是由微软开发的一款轻量级&#xff0c;跨平台的代码编辑器。大家能来搜用VSCode配置c/c&#xff0c;想必也知道VSCode的强大&#xff0c;可以手握一个VSCode同时编写如C&#xff0c;C&#xff0c;C#&#xff…