zoukankan      html  css  js  c++  java
  • 【转载】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。

  • 相关阅读:
    选择器高级,from提交方式
    java基础(5)
    java基础(4)
    java基础(3)
    java基础(2)
    java基础(1)
    数据库基础与ADO.NET和C#中的异常处理
    C#中字符串的常用方法
    Linux基本命令格式(3)
    面向对象第二章
  • 原文地址:https://www.cnblogs.com/laijie/p/5235402.html
Copyright © 2011-2022 走看看