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实现,或者用其他方法实现也可以
???????????????????
Habituellement, nous recommandons d'éviter d'utiliser map/reduce dans MongoDB, car les performances ne sont pas très idéales. La plupart du temps, il peut être remplacé par le cadre d'agrégation, notamment lorsqu'une seule table est impliquée.
Veuillez vérifier la syntaxe d'agrégation pour une syntaxe spécifique.
a*b
Ce sera un peu plus compliqué. Ce dont vous avez réellement besoin, c'est de la valeur de a*b de chaque enregistrement (pipline1), puis de la somme (pipline2) :var map = fonction(){
var réduire = fonction (clé, valeurs){
Une fois la définition ci-dessus terminée, exécutez : db.user.mapReduce(map,reduce,{out: "mr1"});
Ensuite, interrogez le document de mr1 : db.mr1.find();
obtiendra des résultats