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实现,或者用其他方法实现也可以
???????????????????
Biasanya kami mengesyorkan mengelak daripada menggunakan peta/kurangkan dalam MongoDB, kerana prestasinya tidak begitu ideal. Selalunya ia boleh digantikan dengan rangka kerja pengagregatan, terutamanya apabila hanya satu jadual yang terlibat.
Sila semak sintaks pengagregatan untuk sintaks tertentu.
a*b
Ia akan menjadi sedikit lebih rumit Perkara yang anda perlukan sebenarnya ialah nilai a*b setiap rekod (pipline1), dan kemudian jumlah (pipline2):peta var = function(){
var reduce = fungsi(kunci,nilai){
Selepas definisi di atas selesai, laksanakan: db.user.mapReduce(map,reduce,{out: "mr1"});
Kemudian tanya dokumen mr1: db.mr1.find();
akan Mendapat hasil