MongoDB——聚合操作之MapReduce
Posted 小志的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB——聚合操作之MapReduce相关的知识,希望对你有一定的参考价值。
目录
一、MapReduce的概述
- MapReduce操作将大量的数据处理工作拆分成多个线程并行处理,然后将结果合并在一起。MongoDB提供的Map-Reduce非常灵活,对于大规模数据分析也相当实用。
二、MapReduce的阶段
- MapReduce具有两个阶段:
(1)、将具有相同Key的文档数据整合在一起的map阶段;
(2)、组合map操作的结果进行统计输出的reduce阶段。
三、MapReduce的基本语法
-
MapReduce语法格式
db.collection.mapReduce( function() emit(key,value);, //map 函数 function(key,values) return reduceFunction, //reduce 函数 out: <collection>, query: <document>, sort: <document>, limit: <number>, finalize: <function>, scope: <document>, jsMode: <boolean>, verbose: <boolean>, bypassDocumentValidation: <boolean> )
-
MapReduce语法解释
函数 解释 map 将数据拆分成键值对,交给reduce函数 reduce 根据键将值做统计运算 out 可选,将结果汇入指定表 quey 可选筛选数据的条件,筛选的数据送入map sort 排序完后,送入map limit 限制送入map的文档数 finalize 可选,修改reduce的结果后进行输出 scope 可选,指定map、reduce、finalize的全局变量 jsMode 可选,默认false。在mapreduce过程中是否将数 据转换成bson格式。 verbose 可选,是否在结果中显示时间,默认false bypassDocmentValidation 可选,是否略过数据校验 -
MapReduce图解
四、MapReduce示例
4.1、 数据准备
-
准备数据集,执行脚本
var tags = ["nosql","mongodb","document","developer","popular"]; var types = ["technology","sociality","travel","novel","literature"]; var books=[]; for(var i=0;i<50;i++) var typeIdx = Math.floor(Math.random()*types.length); var tagIdx = Math.floor(Math.random()*tags.length); var tagIdx2 = Math.floor(Math.random()*tags.length); var favCount = Math.floor(Math.random()*100); var username = "xx00"+Math.floor(Math.random()*10); var age = 20 + Math.floor(Math.random()*15); var book = title: "book-"+i, type: types[typeIdx], tag: [tags[tagIdx],tags[tagIdx2]], favCount: favCount, author: name:username,age:age ; books.push(book) db.books1.insertMany(books);
4.2、 MapReduce示例
-
统计type为travel的不同作者的books文档收藏数
db.books1.mapReduce( function()emit(this.author.name,this.favCount), function(key,values)return Array.sum(values), query:type:"travel", out: "books_favCount" )
-
由于结果输出到了books_favCount中,所以需要去books_favCount中查看结果
> db.books_favCount.find()
以上是关于MongoDB——聚合操作之MapReduce的主要内容,如果未能解决你的问题,请参考以下文章