mongo-mapreduce测试(8)——阶段总结(1)

 

mongo-mapreduce测试(1)——count/sum/where条件

 

mongo-mapreduce测试(2)——列转行与finalize函数

 

mongo-mapreduce测试(3)——group by having

 

mongo-mapreduce测试(4)——avg

 

mongo-mapreduce测试(5)——max/min

 

mongo-mapreduce测试(6)——综合测试

 

mongo-mapreduce测试(7)——使用js存储过程

 

mongo-mapreduce测试(8)——阶段总结(1)

 

mongo-mapreduce测试(9)——python调用

 

mongo-mapreduce测试(10)——阶段总结(2)

 

mongo-mapreduce测试(11)——跟踪调试

MongoDB中的Map/reduce 进行一些复合查询 , 因为mongodb不支持GROUP BY 查询, MapReduce 又类似于SQL的 GROUP BY ,所以可以认为 MapReduce 就是 mongodb 版的GROUP BY

命令行如下:

db.runCommand(
{ mapreduce : <collection>,
map : <mapfunction>,
reduce : <reducefunction>
[, query : <query filter object>]
[, sort : <sort the query. useful for optimization>]
[, limit : <number of objects to return from collection>]
[, out : <output-collection name>]
[, keeptemp: <true|false>]
[, finalize : <finalizefunction>]
[, scope : <object where fields go into javascript global scope >]
[, verbose : true]
}
);

着重说一下几个参数:

  • out : 临时collection 名称 ,默认根据时间戳自动生成
  • keytemp : 是否保留临时生成的collection 默认false
  • finalize : 对MapReduce执行后的结果再一次处理
  • verbose:输出查询的时间和循环的信息等等
  • scope : 设定值,传值给 map, reduce, finalize 有点类似于全局变量 官网scope样例

执行查询的大概步骤:
1 . MapReduce会对collection A进行查询 query A
2 . 对查询的结果进行你所定义的mapper方法,处理id之类的操作
3 . 对2的结果执行reduce处理
4 . 对3的结果进行finalize处理 (finalize方法为可选)
5 . 最终数据会输出到临时建立的 collection Temp
6 . 断掉本次mongo连接后自动删除 collection Temp 或根据参数保留

标准结果:

{ result : <collection_name>,
counts : {
input : <number of objects scanned>,
emit : <number of times emit was called>,
output : <number of items in output collection>
} ,
timeMillis : <job_time>,
ok : <1_if_ok>,
[, err : <errmsg_if_error>]
}

参考:

1. MongoDB MapReduce 用法及介绍

2. mongo MR官方介绍

posted @ 2013-02-25 11:01  醇酒醉影  阅读(1606)  评论(0编辑  收藏  举报