reduce 命令

  1. db.runCommand(
  2. {
  3. mapReduce: <collection>,
  4. map: <function>,
  5. reduce: <function>,
  6. finalize: <function>,
  7. out: <output>,
  8. query: <document>,
  9. sort: <document>,
  10. limit: <number>,
  11. scope: <document>,
  12. jsMode: <boolean>,
  13. verbose: <boolean>,
  14. bypassDocumentValidation: <boolean>
  15. }
  16. )
  1. mapReduce 你要做并行处理的集合名字
  2. map: 分组依据, emit(key,value) => key => group的key,value => 是你key的数组 key=25, values=【“jack","mary"]
  3. reduce: function(key,values) 里面有两个参数, 第一个参数是key:group操作的key,第二个参数是values: 我们刚才说到的 【数组】,类似group中的finalize函数。
  4. finalize: 这个呢,还是和group中的 finalize 一样,会对每组的结构进行一个最后修改。也可以不修改。
  5. out: 就是我们进行mapreduce之后,将结果存放的位置,一般是“集合类型“。
  6. query: 这个很简单,和group的query一样
  7. sort: 一样的到底,对map操作之前的文档进行排序。
  8. limit: 在map之前限制文档的个数
  9. scope: 给reduce,query之类的函数提供变量访问。
  10. 我们常用到的是: mapReduce, map,reduce, out,query,

二:我们看一下注意事项

我们还是用一个person集合,其中有name和age。

上一节课程我们将group的时候,做了一个对age进行分组的一个例子

  1. age:26,count:2
  2. age:29,count:2
  3. age:31,count:2
  1. 第一步:插入数据源
  1. > db.person.find()
  2. { "_id" : ObjectId("5678a3fc763ea69ae9780c62"), "name" : "mary", "age" : 26 }
  3. { "_id" : ObjectId("5678a403763ea69ae9780c63"), "name" : "jackson", "age" : 26 }
  4. { "_id" : ObjectId("5678a40a763ea69ae9780c64"), "name" : "john", "age" : 29 }
  5. { "_id" : ObjectId("5678a410763ea69ae9780c65"), "name" : "hxc", "age" : 31 }
  6. { "_id" : ObjectId("5678a416763ea69ae9780c66"), "name" : "mongodb", "age" : 31 }
  7. { "_id" : ObjectId("5678a41d763ea69ae9780c67"), "name" : "redis", "age" : 29 }
  1. 执行命令
  1. db.runCommand({
  2. mapreduce:"person",
  3. map:function(){
  4. emit(this.age,this.name); //相当于group的key
  5. },
  6. reduce:function(key,values){ //{key:26,values:["mary","jackson"]}
  7. return {"key":key,"values":values};
  8. },
  9. finalize:function(key,values){
  10. return {"age":key,"count":values.length};
  11. },
  12. out:"t" //最终的存放结果
  13. })
  14. db.runCommand({
  15. mapreduce:"person",
  16. map:function(){
  17. emit(this.age,this.name);
  18. },
  19. reduce:function(key,values){
  20. return {"key":key,"values":values};
  21. },
  22. out:"t"
  23. })
  24. db.runCommand({
  25. mapreduce:"person",
  26. map:function(){
  27. emit(this.age,this.name)
  28. },
  29. reduce:function(key,values){
  30. return values.length;
  31. },
  32. out:"t",
  33. finalize:function(key,values){
  34. return values;
  35. },
  36. query:{"$where":function(){return this.age>28}}
  37. })
  38. db.person.find()
  39. { "_id" : ObjectId("5678a3fc763ea69ae9780c62"), "name" : "mary", "age" : 26 }
  40. { "_id" : ObjectId("5678a403763ea69ae9780c63"), "name" : "jackson", "age" : 26 }
  41. { "_id" : ObjectId("5678a40a763ea69ae9780c64"), "name" : "john", "age" : 29 }
  42. { "_id" : ObjectId("5678a410763ea69ae9780c65"), "name" : "hxc", "age" : 31 }
  43. { "_id" : ObjectId("5678a416763ea69ae9780c66"), "name" : "mongodb", "age" : 31 }
  44. { "_id" : ObjectId("5678a41d763ea69ae9780c67"), "name" : "redis", "age" : 29 }
  1. db.runCommand({
  2. ... mapreduce:"person",
  3. ... map:function(){
  4. ... emit(this.age,this.name)
  5. ... },
  6. ... reduce:function(key,values){
  7. ... return {"key":key,"values":values}
  8. ... },
  9. ... out:"t"
  10. ... })
  11. {
  12. "result" : "t",
  13. "timeMillis" : 20,
  14. "counts" : {
  15. "input" : 6,
  16. "emit" : 6,
  17. "reduce" : 3,
  18. "output" : 3
  19. },
  20. "ok" : 1
  21. }
  22. db.t.find()
  23. { "_id" : 26, "value" : { "key" : 26, "values" : [ "mary", "jackson" ] } }
  24. { "_id" : 29, "value" : { "key" : 29, "values" : [ "john", "redis" ] } }
  25. { "_id" : 31, "value" : { "key" : 31, "values" : [ "hxc", "mongodb" ] } }

把 { "key" : 26, "values" : [ "mary", "jackson" ] } 整体的返回成一个 count就好了 。。。

  1. { "_id" : 26, "value" : 2 }
  2. { "_id" : 29, "value" : 2 }
  3. { "_id" : 31, "value" : 2 }

——————————————————————————————

  1. db.t.find()
  2. { "_id" : 26, "value" : { "key" : 26, "values" : [ "mary", "jackson" ] } }
  3. { "_id" : 29, "value" : { "key" : 29, "values" : [ "john", "redis" ] } }
  4. { "_id" : 31, "value" : { "key" : 31, "values" : [ "hxc", "mongodb" ] } }
  5. db.runCommand({
  6. ... mapreduce:"person",
  7. ... map:function(){
  8. ... emit(this.age,this.name)
  9. ... },
  10. ... reduce:function(key,values){
  11. ... return values.length;
  12. ... },
  13. ... out:"t"
  14. ... })
  15. {
  16. "result" : "t",
  17. "timeMillis" : 14,
  18. "counts" : {
  19. "input" : 6,
  20. "emit" : 6,
  21. "reduce" : 3,
  22. "output" : 3
  23. },
  24. "ok" : 1
  25. }
  26. db.t.find()
  27. { "_id" : 26, "value" : 2 } //这个结果就是我们需要的。。。
  28. { "_id" : 29, "value" : 2 }
  29. { "_id" : 31, "value" : 2 }

我想把"_id" 替换成 "age", "value" 替换成 “count"

query条件的使用:

  1. > db.t.find()
  2. { "_id" : 26, "value" : 2 }
  3. { "_id" : 29, "value" : 2 }
  4. { "_id" : 31, "value" : 2 }
  5. > db.runCommand({
  6. ... mapreduce:"person",
  7. ... map:function(){
  8. ... emit(this.age,this.name)
  9. ... },
  10. ... reduce:function(key,values){
  11. ... return values.length;
  12. ... },
  13. ... out:"t",
  14. ... finalize:function(key,values){
  15. ... return values;
  16. ... },
  17. ... query:{"$where":function(){return this.age>28}}
  18. ... })
  19. {
  20. "result" : "t",
  21. "timeMillis" : 69,
  22. "counts" : {
  23. "input" : 4,
  24. "emit" : 4,
  25. "reduce" : 2,
  26. "output" : 2
  27. },
  28. "ok" : 1
  29. }
  30. > db.t.find()
  31. { "_id" : 29, "value" : 2 }
  32. { "_id" : 31, "value" : 2 }

mongodb--reduce并行处理框架的更多相关文章

  1. Hive数据分析——Spark是一种基于rdd(弹性数据集)的内存分布式并行处理框架,比于Hadoop将大量的中间结果写入HDFS,Spark避免了中间结果的持久化

    转自:http://blog.csdn.net/wh_springer/article/details/51842496 近十年来,随着Hadoop生态系统的不断完善,Hadoop早已成为大数据事实上 ...

  2. Morphia - mongodb之ORM框架

    一.简介 二.注解 1.@Entity 2.@Id3.@Indexed4.@Embedded5.@Transient和@Property6.@Reference 三.示例 四.参考资料 Morphia ...

  3. day96_11_28 mongoDB与scrapy框架

    一.mongodb mongodb是一个面向文档的数据库,而不是关系型数据库.不采用关系型是为了获得更好的扩展性. 它与mysql的区别在于它没有表连接,但是可以通过其他办法实现. 安装数据库. 上官 ...

  4. mongoose-面向对象操作mongodb的Nodejs框架

    介绍 无论是mysql还是mongodb,传统的与数据库交互的方式都是按照他们提供的API来写代码.它们提供的API往往不是很容易理解,而且难以记忆,如果传错了参数,写错一个符号都要查文档. ORM( ...

  5. MongoDB的ORM框架——Morphia

    1.引入pom <dependency> <groupId>org.mongodb.morphia</groupId> <artifactId>morp ...

  6. Mongodb 的ORM框架 Morphia之注解

    @Entity("bands") public class Band { @Id ObjectId id; String name; String genre; @Referenc ...

  7. Mongodb 的ORM框架 Morphia 注解 之 @Reference

    public class BlogEntry { private String title; private Date publishDate; private String body; privat ...

  8. [转]HIVE UDF/UDAF/UDTF的Map Reduce代码框架模板

    FROM : http://hugh-wangp.iteye.com/blog/1472371 自己写代码时候的利用到的模板   UDF步骤: 1.必须继承org.apache.hadoop.hive ...

  9. mean(bootstrap,angular,express,node,mongodb)通用后台框架

    学习node,我这个毫无美感的程序员在bootstrap与node的感染下,向着“全栈工程师”迈进,呵呵! 最终选择如题的技术方案,这些东东都算比较新的,网上的资料比较少,参考了不少github程序及 ...

随机推荐

  1. Linux I2C驱动分析(三)----i2c_dev驱动和应用层分析 【转】

    本文转载自:http://blog.chinaunix.net/uid-21558711-id-3959287.html 分类: LINUX 原文地址:Linux I2C驱动分析(三)----i2c_ ...

  2. Django day02

    一:Django 中 app 的概念 每个项目里面都会 有很多不同的模块,我们可以把它们写在一个项目里,我们把模块分成一个一个不同的app,这样写可以便于管理,写的一些项目也可能不单单是一个页面,还可 ...

  3. HDU 1054 Hungary

    Strategic Game Problem Description Bob enjoys playing computer games, especially strategic games, bu ...

  4. PHP序列化 反序列化

    序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...

  5. spring框架搭建(一)

    spring介绍 spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发复杂性而诞生的. 简单来说spring是一个一站式轻量级开源框架. IOC:In ...

  6. System.net.mail发送电子邮件

    之前做的实现发送邮件的功能,基于System.net.mail,在本地测试是可以发送邮件的,发布到服务器上发送不了邮件,后来发现STMP默认使用25端口收发邮件,服务器封掉25了端口,导致发送邮件失败 ...

  7. ie8及其以下版本兼容性问题之文本省略

    1. 单行文本省略 单行文本省略适用于文本超出内容显示区,则在末尾显示省略号 1.1 普通文本超出省略 普通文本超出显示省略号,示例: .p{ height: 30px line-height: 30 ...

  8. Android上UDP组播无法接收数据的问题

    最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 pac ...

  9. Hadoop2.6.5高可用集群搭建

    软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3, m4, m5这五部机, 每部主机的用户名 ...

  10. 【Oracle】表连接三种方式

    表连接的方式有三种分别是:排序合并连接(Sort Merge Join).嵌套循环连接(Nested Loops Join).哈希连接(Hash Join). 1. 排序合并连接(Sort Merge ...