zoukankan      html  css  js  c++  java
  • (15)mongodb mapReduce的概念及用法

      mapReduce从功能上说类似于RDBMS中的group,它的强大之处在于很好的支持分布式。相比于group、aggregate,mapReduce的用法很简单,其实它的工作原理也很简单,下面介绍一下。

      mapReduce工作分为两步,一是映射,即map,将数据按照某一个规则映射到一个数组里,比如按照type或者name映射,同一个type或者name的数据形成一个数组,二是规约,即reduce,它接收映射规则和数组,然后计算。举例如下:

      1、计算每个栏目的库存总量

      var map=function(){
        emit(this.cat_id,this.goods_number);
      }

      var reduce=function(cat_id,numbers){
        return Array.sum(numbers);
      }

      db.goods.mapReduce(map,reduce,{out:'res'});

      将相同cat_id的goods_number分别映射到各自的数组中;对每一个数组进行求和,执行结果会生成一个res表,该表中保存了执行的结果,如下:

      > db.res.find();
      { "_id" : 2, "value" : 0 }
      { "_id" : 3, "value" : 203 }
      { "_id" : 4, "value" : 3 }
      { "_id" : 5, "value" : 8 }
      { "_id" : 8, "value" : 61 }

    2、计算每个栏目下商品的平均价格

      var map=function(){
        emit(this.cat_id,this.shop_price);
      }
      var reduce=function(cat_id,values){
        return Array.avg(values);
      }
      db.goods.mapReduce(map,reduce,{out:'res'});

      执行结果如下:

      > db.res.find();
      { "_id" : 2, "value" : 823.33 }
      { "_id" : 3, "value" : 1746.0666666666666 }
      { "_id" : 4, "value" : 2297 }
      { "_id" : 5, "value" : 3700 }
      { "_id" : 8, "value" : 75.33333333333333 }
      { "_id" : 11, "value" : 31 }
      { "_id" : 13, "value" : 33.5 }
      { "_id" : 14, "value" : 54 }
      { "_id" : 15, "value" : 70 }

    3、计算每个栏目下商品的平均价格,只统计价格大于100的

      var map=function(){
        emit(this.cat_id,this.shop_price);
      }
      var reduce=function(cat_id,values){
        return Array.avg(values);
      }

      db.goods.mapReduce(map,reduce,{query:{shop_price:{$gt:100}},out:'res'});

      执行结果如下:

      > db.res.find();
      { "_id" : 2, "value" : 823.33 }
      { "_id" : 3, "value" : 1746.0666666666666 }
      { "_id" : 4, "value" : 2297 }
      { "_id" : 5, "value" : 3700 }

    备注:

      Array中的常用方法有如下几种:

      contains、unique、shuffle、tojson、fetchRefs、sum、avg、stdDev,

      可以通过下面的方式查看:for(var key in Array){ print(key); }

      

  • 相关阅读:
    java练习题(字符串类):显示4位验证码、输出年月日、从XML中抓取信息
    java练习题:输出100以内与7有关的数、百马百担、打分(去掉最高、最低分)、二分法查找数据、输出直角三角形、正三角形
    MD5加密算法(转)
    Ajax中的局部事件与全局事件
    Ajax实现全国省市三级联动
    关于Cookie中存放于读取中文字符的问题,以及删除Cookie
    JavaScript中的自定义对象以及实现继承特性
    JavaScript中的变量范围以及闭包的概念
    JavaScript全局函数
    Servlet监听器(转)
  • 原文地址:https://www.cnblogs.com/javasl/p/11333506.html
Copyright © 2011-2022 走看看