无忧支付网首页
您当前的位置:主页 > 每日热点

mongodb mapreduce使用场景(mongodb mapreduce的工作原理)

发布人:hao333   添加时间:2023-07-16 07:27:05

主要介绍mapReduce在MongoDB中的使用,类似于sql的分组和聚合。首先对Map进行分组,然后使用reduce进行统计,最后可选地使用finalize来调整最终结果。嗯,

我先介绍一下,我用的版本是mongodb2.4.5,然后我也用MongoVUE(一个非常好的图形化mongodb管理工具)帮我配合。

1、原始数据,集合中有三个doc被使用:

mongodb mapreduce使用场景(mongodb mapreduce的工作原理)

它们的数据格式是:

mongodb mapreduce使用场景(mongodb mapreduce的工作原理)

可能很多人不关注mongodb中存储的数据格式,但对我来说,这是非常敏感的。我不喜欢在后台使用object来保存这些原本清晰的类型。这里我再多提一点。如果您使用控制台插入数据,您插入的数字,

可能保存为Double,但如果要保存为整数,就必须使用NumberInt()和NumberLong()。示例:

mongodb mapreduce使用场景(mongodb mapreduce的工作原理)

运行后,在控制台上看不到数据类型,但使用MongoVUE,我可以看到:

mongodb mapreduce使用场景(mongodb mapreduce的工作原理)

数据库直接保存为double。并使用:

mongodb mapreduce使用场景(mongodb mapreduce的工作原理)

可以保存为int32,使用NumberLong()保存为Int64。

2.让MapReduce实现多少人找不同名字的统计。首先是map函数,然后是reduce函数。

1 function Map() {2 emit(3 this.name, 4 {count: 1} 5); 6} Issue (key, value) is a grouped function,

1 function Reduce(key,values) {2 var reduced={count:0,name:' ' };//初始化返回值3价值观。foreach(function(val){ 4已减少。计数=val。数数;5 });6退货减少;7 }接下来是减少函数,

好了,让我们看看如何在DB控制台下调用这个MapReduce:

1分贝。run命令({ MapReduce:' le kko '2 Map:function Map(){ 3 emit(4 this。姓名,5 { count:1 } 6);7 },8 reduce : function Reduce(key,values) { 9 var reduced={count:0,name:' ' };//初始化返回值10个值。foreach(function(val){ 11已减少。计数=val。数数;12 });13返回减少;14 },15 out:{ inline:1 } 16 });结果很快出来了:

mongodb mapreduce使用场景(mongodb mapreduce的工作原理)

因为我之前在控制台下又添加了两个文档,所以现在有四个人叫lekko。值得注意的是,这里MapReduce后的结果将全部是double!

3.一些附加操作

MapReduce的简单原理很简单,关键是灵活运用。现在我举几个我自己经历的例子:

(1)将查询放入MapReduce。

在前面的runCommand中添加参数。比如我要查询所有男生,我就加.查询:{'isman' true},

(2)结果的数据类型转换。

使用Finalize函数(该函数在Reduce函数之后调用,它将对所有键的Reduce结果执行最终操作)。比如我在后台调用api后想要的是int数据,而不是double数据。

然后您可以添加Finalize函数:

一.2最终确定:函数Finalize(key,reduced){ 3 reduce。count=number int(减少。计数);四退货减少;5 },6 .这样,

(3)时间类型

因为mongodb有日期类型,所以存储时间的格式和查询时间的格式可能会不一致(尤其是你的mongodb是远程部署,多人协作开发的时候),会导致无法根据时间条件找到数据的问题。我的建议是,

长形式的直接存储时间(过去的秒),那么这个差异问题就不再存在了。