user {'username':, 'age':, 'account':}
//SQL實作
select username,count(sku) from user group by username
//MapReduce實作
map=function (){
emit(this.username,{count:1})
}
reduce=function (key,values){
var cnt=0;
values.forEach(function(val){ cnt+=val.count;});
return {"count":cnt}
}
//執行mapreduce
db.test.mapReduce(map,reduce,{out:"mr1"})
db.mr1.find()
{ "_id" : "Joe", "value" : { "count" : 416 } } { "_id" : "Josh", "value" : { "count" : 287 } } { "_id" : "Ken", "value" : { "count" : 297 } }
//SQL實作
select sum(age * account) from user
//MapReduce實現,或用其他方法實作也可以
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
通常我們會建議避免在MongoDB中使用map/reduce,效能表現並不十分理想。大部分時候可以使用aggregation framework取代,特別是只涉及一個表格的時候。
具體語法就請自己查閱aggregation的語法咯。
a*b
會比較複雜一點,你實際上需要的是每筆記錄的a*b的值(pipline1),然後求和(pipline2):var map = function(){
var reduce = function(key,values){
以上定義完成後執行:db.user.mapReduce(map,reduce,{out:"mr1"});
再查詢mr1的文檔:db.mr1.find();
將會得到結果