zoukankan      html  css  js  c++  java
  • MongoDB MapReduce用法简介

    Map-Reduce部分:Map-Reduce相当于关系型数据库中的group by,主要用于统计数据之用。MongoDB提供的Map-Reduce非常灵活,对于大规模数据分析也相当实用。

    语法

    db.collection.mapReduce(
       map,          // 即map函数。映射函数(生成键值对序列,作为reduce的参数)。
       reduce,       // 即reduce函数。统计函数。
       options       // 一些选项
    )

    使用Map-Reduce要实现两个函数map函数和reduce函数,map函数调用emit(key, value),遍历collection中所有的文档,将key与value传递给reduce函数进行处理。

    map函数必须调用emit(key, value) 返回键值对。

    参数说明

    map函数部分

    作用:用于分组

    函数:function map(){

        emit(param1, param2);

      }

    参数说明:

      param1:需要分组的字段,this.字段名
      param2:需要进行统计的字段,this.字段名

    reduce部分

    作用:处理需要统计的字段

    函数:function reduce(key, values){

        // 统计字段处理

      }

    参数说明:

      key: 指分组字段(emit的param1)对应的值
      values:指需要统计的字段(emit的param2)值组成的数组

    几个简单的统计常用方法

    1.对数值类型进行求和

    function reduce(key, values){
        return Array.sum(values);
    }

    2.对字符串类型进行拼凑

    function reduce(key, values){
        return values.join(', ');
    }

    option部分

    out:将统计结果存放到集合中 (不指定则使用临时集合,在客户端断开后自动删除)
    query:一个筛选条件,只有满足条件的文档才会调用map函数(query,limit,sort可以随意组合)
    sort:和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
    limit:发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)

    栗子

    先插入一些测试用的数据。

    >db.mythings.insert({location:'Guangzhou', population:2400})
    >db.mythings.insert({location:'Shanghai', population:2500})
    >db.mythings.insert({location:'Beijing', population:2200})
    >db.mythings.insert({location:'Shenzhen', population:2100})
    >db.mythings.insert({location:'Guangzhou', population:2400})
    >db.mythings.insert({location:'Shanghai', population:2500})
    >db.mythings.insert({location:'Beijing', population:2200})
    >db.mythings.insert({location:'Shenzhen', population:2100})

    需求:统计各城市的人口总数。

    >function map(){ 
        emit(this.location, this.population); 
    }
    
    >function reduce( key, values ){ 
        return {"城市":key, "总数":Array.sum(values)}; 
    }
    
    >db.mythings.mapReduce( map, reduce, {
       out: "popu_counts",
       query: {}   
    }).find()

      至此。转载请注明出处。

     

  • 相关阅读:
    使用JSON.NET实现对象属性的格式化的自定义
    AspNetCore项目-Service注入或覆盖
    发布Nuget
    收藏
    工具
    快捷键大全
    SqlServer分页查询语句
    面试相关
    Eratosthes algrithm 求素数
    code training
  • 原文地址:https://www.cnblogs.com/wcwnina/p/9494706.html
Copyright © 2011-2022 走看看