mongo-mapreduce测试(8)——阶段总结(1)
mongo-mapreduce测试(1)——count/sum/where条件
mongo-mapreduce测试(2)——列转行与finalize函数
mongo-mapreduce测试(3)——group by having
mongo-mapreduce测试(7)——使用js存储过程
mongo-mapreduce测试(9)——python调用
mongo-mapreduce测试(10)——阶段总结(2)
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>]
}
参考:
2. mongo MR官方介绍