MongoDB自带MapReduce功能和用spring-data实现MapReduce

Spring Data(一)|什么是Spring Data 理解 介绍 Spring Data的使命是为数据访问提供熟悉且一致的基于Spring的编程模型,同时仍保留底层数据存储的特​​殊特性。 它使数据访问技术,关系数据库和非关系数据库,map-reduce框架和基于云的数据服务变得简单易用。这是一个伞形项目,其中包含许多特定于给定数据库的子项目。这些项目是通过与这些激动人心的技术背后的许多公司和开发人员合作开发的。 特征 强大的存储库和自定义对象映射抽... 阅读详情

一、使用MongoDB自带shell完成MapReduce。

1、首先插入测试数据。

use test
db.mapreduce.insert({"_id":"1","x":["a","b"]})
db.mapreduce.insert({"_id":"2","x":["b","c"]})
db.mapreduce.insert({"_id":"3","x":["c","d"]})

使用test数据库,在mapreduce collection的表中插入3条数据

使用

db.mapreduce.find()

查看数据中数据。如果有MongoVue也可以使用工具查看,

2、编写Map函数和Reduce函数

Map函数:

var m = function(){
  for(var i = 0; i < this.x.length; i++){
    emit(this.x[i],1);
  }
}

Map函数调用emit(key,value)遍历collection中所有记录,将key与value传递给Reduce函数进行处理。使用this访问当前处理的document。

Reduce函数:

var r = function(key,values){
  var sum = 0;
  for(var i = 0; i < values.length; i++)
    sum += values[i];
  return sum;
}

Reduce函数接受的参数类似Group效果,将Map返回的键值序列组合成{key:[value1,value2,value...]}传递给reduce,在本例中组成{a:[1],b:[1,1],c:[1,1],d:[1]}

3、通过db.runCommand来执行MapReduce操作:

var res = db.runCommand({
 mapreduce:"mapreduce",
 map:m, reduce:r, 
 out:"mapreduce_out"});

mapreduce参数传入对应的collection名,map参数传入Map函数,out为输出的collection名,会在数据库中另外建一张表来保存处理后的结果。这是几个最基本的参数,还有更多参数可以查看Mongo实战,在我资源中有。也可以自己去网上找找。

最后的结果是:
{ "_id" : "a", "value" : 1 }
{ "_id" : "b", "value" : 2 }
{ "_id" : "c", "value" : 2 }
{ "_id" : "d", "value" : 1 }

可以通过

db.mapreduce_out.find()

查看。
 

 

二、使用spring-data-mongodb进行MapReduce

spring-data-mongodb是Apache公司方便javaer操纵mongodb的包。英文文档在我的资源中也有。基本的思想就是拿到MongoTemplete句柄,然后对mongodb进行操作。

1、存入测试数据,可以用shell直接存入,也可以用java代码。

2、定义一个实体类去存贮

public class ValueObject {
  private String id;
  private float value;

  public String getId() {
    return id;
  }
  public float getValue(){
    return value;
  }
  public void setValue(float value) {
    this.value = value;
  }
}

3、Mapreduce

   其实关键代码就一行:

package mongo_repository.mongo_repository;
import java.net.UnknownHostException;

import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.mapreduce.MapReduceOptions;
import org.springframework.data.mongodb.core.mapreduce.MapReduceResults;

import com.mongodb.Mongo;

public class MapReduce {
	public static void main(String[] args) throws UnknownHostException {
		MongoOperations mongoOperation = new MongoTemplate(new Mongo("localhost"), "test");
		String map  = "function () {for(var i=0;i<this.x.length;i++){emit(this.x[i],1);}}";
		String reduce = "function(key, values){ var sum = 0; for(var i = 0; i<values.length;i++ )sum += values[i]; return sum; }";
                //参数分别为:collection名,map函数的字符串,reduce函数的字符串,输出的表名[可选],实体类
		MapReduceResults<ValueObject> results = mongoOperation.mapReduce("mapreduce", map, reduce,new MapReduceOptions().outputCollection("mr_out"), ValueObject.class);
	}
}

暂时做一个这么简单的例子,其实mapreduce还可以做更复杂的功能,更详细的参数设定可以去看官方文档。

 

 


 

SpringCloud集成Spring Data MongoDB 文章目录MongoDB源码spring-mongodb运行 MongoDB   MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案的非关系型数据库。   MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。   MongoDB这种非关系型数据库与我们应用的最广泛的传... 阅读详情

相关推荐

MongoDB中MapReduce的使用方法详解

MapReduce应该算是MongoDB操作中比较复杂的了,下面这篇文章主要给大家介绍了关于MongoDB中MapReduce使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。

MongoDB mapReduce和Spring Data配合使用详解

经过几天的折腾, 终于弄明白了MongoDB mapReduce在和Spring Data配合使用的方法,简单来说,首先要弄清楚什么是Map Reduce,为什么我们要用map reduce做统计,一般来说, 对应sql语句的group by的场景,都需要用到map reduce。 map reduce的map函数和reduce函数都是javascript写的,因此先要在mongo client先...

caodaoxi的专栏 202

保姆级教程:用Anaconda+PyCharm搞定YOLOv8本地部署(附避坑指南)

本文提供了一份详细的YOLOv8本地部署指南,涵盖Anaconda环境配置、PyCharm集成到模型部署的全过程。特别针对国内开发者需求,整合了镜像加速和常见报错解决方案,帮助快速完成目标检测模型的本地部署与实战应用。

weixin_42528090的博客 433

MongodbMapReduce的简单使用

MongodbMapReduced的简单使用简单理解:mongodb shell原数据mongo shell 执行结果springboot 使用mongodb MapReduceJava代码执行结果 简单理解: mongodb 的mapReduce 很类似于分组语句(group by) ,map 函数按照key进行分组而后reduce函数进行计算。reduce的语法是类似于JavaScript,不知道在哪看到的。因为用的少,所以很复杂的用法不是很清楚,但是如果是使用分组聚合操作,那么使用MapReduce是

Myueye的博客 788

Yolov5自学笔记之一--从入门到入狱,功能强大不要乱用(实现yolov5的基本功能使用流程及训练自己的数据集)

零基础自学yolov5,学会简单使用和训练自己的数据集,在自己工作中使用

qq_41597915的博客 1万+

STM32F103C8T6实战:手把手教你搭建智能火灾报警系统(附MQ-2传感器调试技巧)

本文详细介绍了基于STM32F103C8T6单片机和MQ-2烟雾传感器的智能火灾报警系统搭建过程。从硬件选型、电路设计到软件开发,提供全面的实战指导,特别包含MQ-2传感器调试技巧,帮助开发者快速实现稳定可靠的智能火灾监控系统。

year5的博客 213

一篇文章带你搞定 MongoDB 中 MapReduce 使用

玩过 Hadoop 的小伙伴对 MapReduce 应该不陌生,MapReduce 的强大且灵活,它可以将一个大问题分解为多个小问题,将各个小问题发送到不同的机器上去处理,所有的机器都完成计算后,再将计算结果合并为一个完整的解决方案,这就是所谓的分布式计算。此处我们就来看看 MongoDB 中 MapReduce 的使用。 文章目录一、mapReduce二、runCommand 实现 一、mapReduce MongoDB 中的 MapReduce 可以用来实现更复杂的聚合命令,使用 MapReduce 主

南淮北安的博客 3486

Spring Boot Swagger未授权访问漏洞:原理、风险与修复方案详解

在微服务架构中,API文档管理是开发与运维的重要环节。Swagger作为RESTful API文档生成与调试的标准化工具,通过OpenAPI规范自动生成交互式接口文档,极大提升了开发效率。然而,其默认配置往往缺乏访问控制,导致文档端点直接暴露,形成未授权访问漏洞。从技术原理看,该漏洞源于Spring Boot等框架集成Swagger时,相关端点未纳入安全框架的拦截范围,攻击者可通过扫描常见路径获取完整的接口定义与数据结构。这不仅会造成敏感信息泄露,更可能成为越权操作、数据篡改等深度攻击的入口点。在工程实践中

weixin_42524171的博客 494

Altium Designer 20.2 高效PCB设计技巧:从安装到出GERBER全流程

PCB设计是电子工程中的核心环节,而Altium Designer作为业界主流的电子设计自动化工具,其稳定性和可扩展性深受工程师信赖。合理运用设计工具的原理与功能,能显著提升从原理图绘制到电路板布线的整体效率。在实际工程中,掌握DRC检查、元件库管理、交互式布线等基础操作,是保证设计质量与可制造性的关键。面对生产交付阶段,GERBER文件的输出规范与自检流程更直接关系到打样成败。本文从软件安装环境适配、工程文件瘦身、快捷键配置等日常高频场景切入,系统梳理了一套覆盖全流程的PCB设计实践策略,帮助工程师规避常

weixin_34221112的博客 374

PPT高清导出秘籍:如何轻松设置600dpi图片分辨率

本文详细解析了PPT导出图片模糊的根本原因,并提供了通过修改Windows注册表将导出分辨率从默认的96dpi提升至600dpi的完整教程。该方法能显著提升图片清晰度,满足学术出版与高质量印刷需求,文中还包含效果对比、进阶设置及常见问题解答。

a0b1c2d3的专栏 1313

跨越移植陷阱:ESP-IDF下LVGL与ILI9341的组件化集成与常见避坑指南

本文详细解析了在ESP-IDF环境下将LVGL图形库与ILI9341显示屏驱动进行组件化集成的完整流程。重点介绍了移植过程中的关键配置策略、内存管理优化技巧以及常见问题解决方案,帮助开发者有效规避内存溢出、显示异常等典型陷阱,实现高效稳定的嵌入式GUI开发。

yhn456789的博客 623

mongoDB实现MapReduce

一、MongoDB Map Reduce Map-Reduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。MongoDB提供的Map-Reduce非常灵活,对于大规模数据分析也相当实用。 基本语法: db.collection.mapReduce( function() {emit(key,value);}, ...

weixin_30251587的博客 489

三轴加速度传感器计步算法优化:动态阈值与滤波技术的实践应用

本文深入探讨了三轴加速度传感器计步算法的优化实践,重点分析了动态阈值调整与高效滤波技术如何协同提升计步精度与鲁棒性。通过对比均值滤波的局限,引入向量模长计算、多级自适应阈值以及状态机判决逻辑,并结合代码示例,为嵌入式及移动应用开发者提供了应对复杂运动场景的实用解决方案。

cherry的博客 500

MongoDB mapReduce和Spring Data配合使用详解

经过几天的折腾, 终于弄明白了MongoDB  mapReduce在和Spring Data配合使用的方法,简单来说,首先要弄清楚什么是Map Reduce,为什么我们要用map reduce做统计,一般来说, 对应sql语句的group by的场景,都需要用到map reduce。 map reduce的map函数和reduce函数都是javascript写的,因此先要在mongo client

西涛offbye-移动全栈技术博客 7025

甲基化生物信息学分析及批次效应校正全流程

本文系统阐述了DNA甲基化数据分析中的批次效应问题及解决方案。甲基化数据(β值和M值)对实验批次差异高度敏感,可能导致假阳性结果。文章详细介绍了批次效应检测方法(PCA可视化、BEclear定量评分)和校正流程,包括数据预处理、参数化(ComBat-met)与非参数化(BEclear)校正方法,并提供了完整的R代码实现。重点解决了β值有界分布与统计模型假设冲突的问题,为甲基化研究的可靠性提供技术保障。

huanghm88的专栏 106

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Using MongoDB/GridFS and Spring Data

I recently delved into MongoDB for the first time, and albeit I was skeptical at first, I now believe it is my preference to use a NOSQL database over a traditional RDBMS. I rarely just fall in love w

Ryan Z 的技术日志 3605

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MongoDB - Spring Data MongoTemplate使用

Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate类,方便我们通过java代码对MongoDB进行CRUD的操作。 一、增加:save、insert <T> T save(T var1); <T> T save(T var1, String var2); 1. 传入对象,不传集...

Lupu's journey - 生活、分享 1140

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java连接MongoDB所需要实现得 org.springframework.data.mongodb.core.mapreduce.GroupBy

分组查询主要使用org.springframework.data.mongodb.core.mapreduce.GroupBy这个spring中的类: 例: GroupBy groupBy = GroupBy.key("logonIp") .initialDocument(initial) .reduceFunction(reduceFunction); GroupByResults<T...

weixin_42726306的博客 1127

mongodb视频课程以及spring data mongodb视频

MongoDB 是一个基于分布式文件存储的数据库。 由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 mongodb是目前在IT行业非常流行的一种非关系型数据库(NoSql) 其灵活的数据存储方式,备受当前IT从业人员的青睐 各

u010889990的专栏 3074

mongo java mapreduce_[Spring Data MongoDB]学习笔记--MapReduce

mongodb的MapReduce主要包含两个方法:map和reduce。举个例子,假设现在有下面3条记录{ "_id" : ObjectId("4e5ff893c0277826074ec533"), "x" : [ "a", "b"] }{"_id" : ObjectId("4e5ff893c0277826074ec534"), "x" : [ "b", "c"] }{"_id" : Objec...

weixin_29044157的博客 228

mongodb sum 操作

Mongodb 统计某个字段的和,可以使用聚合函数。 数据结构如下: &gt; db.message.findOne() { "_class" : "com.cyou.appwiki.bean.Message", "_id" : ObjectId("53997f80c451bf833288b882"), "content" : "power9li的回答2",

garyli 2014

spring data简介

Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问计数,包括非关系数据库、Map-Reduce 框架、云数据服务等等;另外也包含对关系数据库的访问支持。 Spring Data 包含多个子项目: Commons - 提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化 Hadoop - 基于 Spring 的 Hadoop 作

刘琦的专栏 856

mongodb 通过MapReduce统计用户Pv Uv

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33964094的博客 439
上一篇: Hbase的基本介绍
下一篇: 使用Android Host模式与Arduino进行通信
hello_java_
博客等级 码龄15年 20粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值