首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

mongodb mapreduce分析(4)

mongodb mapreduce分析(4)

mapreduce例子:

首先我们插入数据

db.c.insert({country:"中国" province:"广东省" city:"广州" temprature:"12°C" weather:"晴"});

db.c.insert({country:"中国" province:"广东省" city:"深圳" temprature:"15°C" weather:"晴"});

db.c.insert({country:"中国" province:"广东省" city:"珠海" temprature:"7°C" weather:"多云"});

db.c.insert({country:"中国" province:"贵州省" city:"贵阳" temprature:"4°C" weather:"晴"});

db.c.insert({country:"中国" province:"贵州省" city:"遵义" temprature:"2°C" weather:"晴"});

db.c.insert({country:"中国" province:"云南省" city:"昆明" temprature:"24°C" weather:"多云"});

db.c.insert({country:"中国" province:"云南省" city:"丽江" temprature:"22°C" weather:"晴"});

db.c.insert({country:"澳大利亚" province:"新南威尔士州" city:"悉尼" temprature:"15°C" weather:"晴"});

db.c.insert({country:"澳大利亚" province:"维多利亚州" city:"墨尔本" temprature:"20°C" weather:"晴"});

PS:由于MongoDB中没有提供给shell的“批量插入方法”,不过各个语言的驱动driver有提供批量的方法。或者对于相同的数据可以用for循环插入。在这里我直接用mongovue直接分9次插入






插入完成后一共有9条数据:




用法一:

1.计数的例子:

一:求所有记录的总条数

db.runCommand({ mapreduce: "c",
map : function Map() {


emit(
  1,     // how to group
  {count: 1} // associated data point (document)
);


},
reduce : function Reduce(key, values) {

      Total=0;


values.forEach(function(val) {
   Total += val.count;
});

return Total;




},
finalize : function Finalize(key, reduced) {


return reduced;
},
out : { inline : 1 }
});

结果:

分析:map函数中emit函数分组,因为我们要算所有记录的总条数,所有这里就不分组了。key可以用任意的数值。这样就只有一个小组。在reduced里求总数。返回。 可以得到一共有9条记录













返回列表