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实现,或者用其他方法实现也可以
???????????????????
曾经蜡笔没有小新2017-05-02 09:20:23
パフォーマンスがあまり理想的ではないため、通常は MongoDB での map/reduce の使用を避けることをお勧めします。ほとんどの場合、特に関係するテーブルが 1 つだけの場合は、集計フレームワークで置き換えることができます。
リーリー特定の構文については、自分で集計の構文を確認してください。 a*b
実際に必要なのは、各レコードの a*b の値 (pipline1) であり、それを合計します (pipline2)。
リーリー
PHP中文网2017-05-02 09:20:23
varマップ = function(){
リーリーvarreduce = function(key,values){
リーリー上記の定義が完了したら、db.user.mapReduce(map,reduce,{out:"mr1"});を実行します。
次に、mr1のドキュメントをクエリします: db.mr1.find();
結果は次のようになります。入手しました