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条记录
|