(15)mongodb mapReduce的概念及用法

Posted 明月之诗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(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); }

 

  

以上是关于(15)mongodb mapReduce的概念及用法的主要内容,如果未能解决你的问题,请参考以下文章

57-4 数据库分片概念及mongodb sharding的实现

第五十一课 NoSQL基础概念及MongoDB应用数据库分配概念

01函数极限的概念及性质

栈的概念及实现

VLAN的概念及实验

java 继承的概念及案例