• (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); }

      

  • 相关阅读:
    一站式示例代码库登陆微软中国首页
    一站式示例代码库 中文版 2010年10月更新
    微软一站式示例代码库20101010 新增代码示例简介
    一站式示例代码库 中文版 2010年9月更新
    微软全新示例代码请求服务正式上线
    Merge Sort 归并排序
    递归的Fibonacci在数羊
    VS2010 常用快捷键总结
    【总结——HTTP协议】
    在项目中使用log4net记录日志
  • 原文地址:https://www.cnblogs.com/javasl/p/11333506.html
Copyright © 2020-2023  润新知