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 구문을 확인해주세요.
으아악a*b
좀 더 복잡해집니다. 실제로 필요한 것은 각 레코드의 a*b 값(pipline1)과 합계(pipline2)입니다.var map = function(){
으아아아var 감소 = 함수(키, 값){
으아아아위 정의가 완료된 후 실행: db.user.mapReduce(map,reduce,{out: "mr1"});
그런 다음 mr1의 문서 쿼리: db.mr1.find();
결과를 얻을 것입니다