gpt4 book ai didi

MongoDB——聚合操作之MapReduce

转载 作者:知者 更新时间:2024-03-13 01:32:41 24 4
gpt4 key购买 nike

一、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()

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com