【转载】MongoDB中的MapReduce 高级操作介绍

转载自残缺的孤独

1、概述

MongoDB中的MapReduce相当于关系数据库中的group by。使用MapReduce要实现两个函数Map和Reduce函数。Map函数调用emit(key,value),遍历

Collection中所有的记录,将key与value传递给Reduce函数进行处理。

2、MapReduce

(1)其基本语法如下所示:

db.runCommand({  
    mapreduce:<collection>,  
    map:<mapfunction>,  
    reduce:<reducefunction>,  
    [,query:<query filter object>]  
    [,sort:<sorts the input objects using this key.Useful for optimization,like sorting by the emit key for fewer reduces>]  
    [,limit:<number of objects to return from collection>]  
    [,out:<see output options below>]  
    [,keeptemp:<true|false>]  
    [,finalize:<finalizefunction>]  
    [,scope:<object where fields go into javascript global scope>]  
    [,verbose:true]  
});  

参数说明:

Mapreduce:要操作的目标集合

Map:映射函数(生成键值对序列,作为reduce函数参数)

Reduce:统计函数

Query:目标记录过滤

Sort:目标记录排序

Limit:限制目标记录数量

Out:统计结果存放集合(不指定使用临时集合,在客户端断开后自动删除)

Keeptemp:是否保留临时集合

Finalize:最终处理函数(对reduce返回结果进行最终整理后存入结果集合)

Scope:向map、reduce、finalize导入外部变量

Verbose:显示详细的时间统计信息。
(2)执行查询的步骤

A.MapReduce对指定的集合Collection进行查询

B.对A的结果集进行mapper方法采集

C.对B的结果执行finalize方法处理

D.最终结果集输出到临时Collection中

E.断开连接,临时Collection删除或保留。

3、Map函数

Map函数调用当前对象进行处理,把值传递给reduce函数。Map方法使用this来操作当前对象,至少调用一次emit(key,value)方法向reduce提供参数。

其中的key为最终结果集中的_id。

4、Reduce函数

该函数接受map函数传来的key和value值。reduce函数中的key就是emit(key,value)中的key,而value是emit函数中同一个key返回的value数组。

5、示例

现有如下集合及数据:


下面是map函数,对age大于25的进行处理:


下面是reduce函数:


下面是mapreduce函数:


查询结果:


从结果集可以看出,临时结果集中的_id是emit函数中的key。

原文地址:https://www.cnblogs.com/laijie/p/5235402.html