码迷,mamicode.com
首页 > 数据库 > 详细

(15)mongodb mapReduce的概念及用法

时间:2019-08-11 01:18:19      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:uniq   bms   on()   val   mongodb   生成   reduce   aggregate   规约   

  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的概念及用法

标签:uniq   bms   on()   val   mongodb   生成   reduce   aggregate   规约   

原文地址:https://www.cnblogs.com/javasl/p/11333506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!