MongoDB教程(十八):MongoDB MapReduce
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
文章目录
- 引言
- 一、MapReduce 概述
- 二、MapReduce 实现
- Map 函数
- Reduce 函数
- 完整的 MapReduce 调用
- 三、MapReduce 详解
- 数据准备
- 执行 MapReduce
- 四、MapReduce 的高级选项
- 五、总结
引言
MongoDB 的 MapReduce 是一种强大的工具,用于处理大规模数据集并从中提取有价值的信息。MapReduce 的概念源自 Google 的论文,后来被 Hadoop 和其他大数据处理框架所采纳。在 MongoDB 中,MapReduce 提供了一种灵活的方式对集合中的数据进行聚合和分析。本文将深入探讨 MapReduce 的工作原理,并通过具体的案例代码来演示其使用方法。
一、MapReduce 概述
MapReduce 分为两个主要阶段:Map 阶段和 Reduce 阶段。
-
Map 阶段:在这一阶段,用户定义的 map 函数被应用于集合中的每一项文档,产生一系列的键值对。这些键值对随后会被分组,具有相同键的所有值会被发送到 Reduce 阶段。
-
Reduce 阶段:在这一阶段,用户定义的 reduce 函数接收一组键相同的值,并将它们聚合成更少的输出值。最终的输出是一个键值对的列表。
二、MapReduce 实现
Map 函数
function map() {emit(this.category, this.price);
}
这个 map 函数会遍历集合中的每一条文档,然后发出一对键值对,其中键是文档中的 category 字段,值是 price 字段。
Reduce 函数
function reduce(key, values) {var total = 0;for (var i = 0; i < values.length; i++) {total += values[i];}return total;
}
reduce 函数接收一个键和该键对应的值数组。在这个例子中,它计算了所有属于同一类别的商品价格总和。
完整的 MapReduce 调用
db.products.mapReduce(function() { emit(this.category, this.price); },function(key, values) { var total = 0;for (var i = 0; i < values.length; i++) {total += values[i];}return total;},{out: "outputCollection"}
);
这段代码会在 products 集合上执行 MapReduce,并将结果存储在一个名为 outputCollection 的新集合中。
三、MapReduce 详解
数据准备
假设我们有一个 products 集合,其中包含以下文档:
{"_id": ObjectId("5f9c9a8d2b2acd3a4f6c79b7"),"name": "Laptop","category": "Electronics","price": 1200
},
{"_id": ObjectId("5f9c9a8d2b2acd3a4f6c79b8"),"name": "Monitor","category": "Electronics","price": 200
},
{"_id": ObjectId("5f9c9a8d2b2acd3a4f6c79b9"),"name": "T-shirt","category": "Clothing","price": 20
}
执行 MapReduce
在执行上述 MapReduce 代码后,outputCollection 将会包含以下文档:
{"_id": "Electronics","value": 1400
},
{"_id": "Clothing","value": 20
}
这里 _id 字段对应于原始 map 函数中的 key,而 value 字段则是 reduce 函数的输出。
四、MapReduce 的高级选项
MongoDB 的 MapReduce 支持许多高级选项,例如:
- out 参数:指定输出结果的存储位置,可以是一个新集合或者覆盖现有集合。
- query 参数:限制 MapReduce 在特定子集的文档上运行。
- sort 参数:在 MapReduce 之前对文档进行排序。
- finalize 参数:在 Reduce 函数之后运行,用于对输出进行最后的修改。
五、总结
MongoDB 的 MapReduce 是一个功能强大的工具,用于处理大规模数据集。通过本文的介绍,你应该能够理解 MapReduce 的基本原理,并能够编写自己的 MapReduce 函数来解决复杂的数据分析问题。然而,在性能敏感的应用场景中,考虑使用 MongoDB 的聚合框架(Aggregation Framework),因为它提供了更优化的性能和更丰富的功能集。
喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘

💝💝💝如有需要请大家订阅我的专栏【MongoDB系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!
| MongoDB相关文章索引 | 文章链接 |
|---|---|
| MongoDB教程(一):Linux系统安装mongoDB详细教程 | MongoDB教程(一):Linux系统安装mongoDB详细教程 |
| MongoDB教程(二):mongoDB引用shell | MongoDB教程(二):mongoDB引用shell |
| MongoDB教程(三):mongoDB用户管理 | MongoDB教程(三):mongoDB用户管理 |
| MongoDB教程(四):mongoDB索引 | MongoDB教程(四):mongoDB索引 |
| MongoDB教程(五):mongoDB聚合框架 | MongoDB教程(五):mongoDB聚合框架 |
| MongoDB教程(六):mongoDB复制副本集 | MongoDB教程(六):mongoDB复制副本集 |
| MongoDB教程(七):mongoDB分片 | MongoDB教程(七):mongoDB分片 |
| MongoDB教程(八):mongoDB数据备份与恢复 | MongoDB教程(八):mongoDB数据备份与恢复 |
| MongoDB教程(九):java集成mongoDB | MongoDB教程(九):java集成mongoDB |
| MongoDB教程(十):Python集成mongoDB | MongoDB教程(十):Python集成mongoDB |
| MongoDB教程(十一):MongoDB关系管理与文档关联 | MongoDB教程(十一):MongoDB关系管理与文档关联 |
| MongoDB教程(十二):MongoDB数据库索引 | MongoDB教程(十二):MongoDB数据库索引 |
| MongoDB教程(十四):MongoDB查询分析 | MongoDB教程(十四):MongoDB查询分析 |
| MongoDB教程(十五):MongoDB原子操作 | MongoDB教程(十五):MongoDB原子操作 |
| MongoDB教程(十六):MongoDB高级索引 | MongoDB教程(十六):MongoDB高级索引 |
| MongoDB教程(十七):MongoDB主键类型ObjectId | MongoDB教程(十七):MongoDB主键类型ObjectId |
❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
相关文章:
MongoDB教程(十八):MongoDB MapReduce
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、MapRed…...
HTML前端面试题之<iframe>标签
面试题:iframe 标签的作用是什么?有哪些优缺点 ? 讲真,刷这道面试题之前我根本没有接触过iframe,网课没讲过,项目实战没用过,但却在面试题里出现了!好吧,我只能说:前端路漫漫&…...
Docker-Compose实现MySQL之主从复制
1. 主服务器(IP:192.168.186.77) 1.1 docker-compose.yml services:mysql-master:image: mysql:latest # 使用最新版本的 MySQL 镜像container_name: mysql-master # 容器的名称environment:MYSQL_ROOT_PASSWORD: 123456 # MySQL root 用户的密码MYSQL_DATABASE: masterd…...
jetson显卡没有加速,而是在用cpu推理?
jetson的库,特别是使用显卡的库,大多需要单独安装 大概率是重装了pytorch,可以使用jetson官网的pytorch! 下面是官网的链接 PyTorch for Jetson - Announcements - NVIDIA Developer Forums 安装完成之后先使用命令查看是否安…...
Linux下如何安装配置Fail2ban防护工具
Fail2ban是一款在Linux服务器上用于保护系统免受恶意攻击的防护工具。它通过监视系统日志,检测到多次失败的登录尝试或其他恶意行为后,会自动将攻击源的IP地址加入防火墙的黑名单,从而阻止攻击者进一步访问服务器。本文将介绍如何在Linux系统…...
js的深浅拷贝
深浅拷贝是编程中对数据复制的两种不同方式,它们在处理对象和数组等复合数据结构时尤为重要。下面将详细解释这两种拷贝方式。 浅拷贝(Shallow Copy) 浅拷贝创建了原始对象的一个新实例,但这个新实例的属性只是原始对象属性的引…...
实验八: 彩色图像处理
目录 一、实验目的 二、实验原理 1. 常见彩色图像格式 2. 伪彩色图像 3. 彩色图像滤波 三、实验内容 四、源程序和结果 (1) 主程序(matlab (2) 函数FalseRgbTransf (3) 函数hsi2rgb (4) 函数rgb2hsi (5) 函数GrayscaleFilter (6) 函数RgbFilter 五、结果分析 1. …...
Python酷库之旅-第三方库Pandas(048)
目录 一、用法精讲 171、pandas.Series.nlargest方法 171-1、语法 171-2、参数 171-3、功能 171-4、返回值 171-5、说明 171-6、用法 171-6-1、数据准备 171-6-2、代码示例 171-6-3、结果输出 172、pandas.Series.nsmallest方法 172-1、语法 172-2、参数 172-3、…...
springboot爱宠屋宠物商店管理系统-计算机毕业设计源码52726
目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…...
自训练和增量训练word2vec模型
1、自己准备训练语料文件 根据自己的业务场景准备训练数据,比如用户在商城上的同购行为序列或同浏览行为序列。 我们希望通过自己训练业务相关的语料word2vec模型来获得词嵌入、词相关性查询等。 1.1 准备语料库文件 # 示例:准备自己的一个大规模的语…...
华三路由器开启web访问
配置路由器: # 配置Web用户名为admin,认证密码为admin,服务类型为http,用户角色为network-admin。 [Sysname] local-user admin [Sysname-luser-manage-admin] service-type http [Sysname-luser-manage-admin] authorization…...
C++软件开发值得推荐的十大高效软件分析工具
目录 1、概述 2、高效软件工具介绍 2.1、窗口查看工具SPY 2.2、Dependency Walker 2.3、剪切板查看工具Clipbrd 2.4、GDI对象查看工具GDIView 2.5、Process Explorer 2.6、Prcoess Monitor 2.7、API Monitor 2.8、调试器Windbg 2.9、反汇编工具IDA 2.10、抓包工具…...
vue2老项目中node-sass更换dart-sass
更换原因:node-sass经常会出现node版本问题,就很麻烦 卸载项目中的node-sass sass-loader npm uninstall sass-loader sass 安装dart-sas sass-loader 推荐安装sass1.26.2 sass-loader7.3.1 npm install sass-loader7.3.1 sass1.26.2 从新配置vue.…...
源/目的检查开启导致虚拟IP背后的LVS无法正常访问
情况描述 近期发现48网段主机无法访问8.83这个VIP(虚拟IP),环境是 8.83 绑定了两个LVS实例,然后LVS实例转发到后端的nginx 静态资源;整个流程是,客户端发起对VIP的请求,LVS将请求转发到后端实例…...
类和对象(四)
构造函数中的初始化列表 之前在实现构造函数时,主要是在函数体内进行赋值,而构造函数还有另一种初始化方式,通过初始化列表进行初始化。 初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,…...
<PLC><HMI><汇川>在汇川HMI画面中,如何为UI设置全局样式?
前言 汇川的HMI软件是使用了Qt来编写的,因此在汇川的HMI程序编写过程,是支持使用qt的样式来自定义部件样式的,即qss格式。 概述 汇川的软件本身提供三个系统的style样式,我们可以直接使用,但是,如果系统提供的样式不符合你的需求,那么你可以对其进行修改,或者自己新建…...
在Git项目中添加并应用“.gitignore”文件
在Git项目中添加并应用.gitignore文件 创建或修改.gitignore文件: 在项目的根目录下创建一个名为.gitignore的文件。如果已经有此文件,可以直接修改。 在文件中添加您希望Git忽略的文件和目录。例如: # 忽略所有的log文件 *.log# 忽略所有的…...
LeetCode Hot100 搜索二维矩阵
给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。…...
iOS中的KVO(Key-Value Observing)详解
iOS中的KVO(Key-Value Observing)详解 一、KVO概述 KVO(Key-Value Observing),即键值观察/监听,是苹果提供的一套事件通知机制。它允许一个对象(观察者)观察/监听另一个对象&#…...
算法 —— 暴力枚举
目录 循环枚举 P2241 统计方形(数据加强版) P2089 烤鸡 P1618 三连击(升级版) 子集枚举 P1036 [NOIP2002 普及组] 选数 P1157 组合的输出 排列枚举 P1706 全排列问题 P1088 [NOIP2004 普及组] 火星人 循环枚举 顾名思…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
