2 yougoss Yougoss 于 2016.04.07 17:47 提问

MongoDB中的mapReduce中reduce文件只作用在一个文档上

小白刚接触MongoDB,看到mapReduce这里不是很清楚,自己编了一段代码,想做个计数,然后发觉map方法出来的value如果只有一个元素的时候,好像不参与到reduce函数的计算中。
如:


var map=function(){
    emit(this.name,{count:1})
}
var reduce=function(key,values){
    var count=0;
    for(var i in values){
        count+=values[i].count*2;
    }
    return {name:key,age:count}

}
db.student.mapReduce(map,reduce,
    {
        out:"test"  
    }
).find()

输出结果为:

 { 
    "_id" : "xly", 
    "value" : {
        "name" : "xly", 
        "age" : NumberInt(4)
    }
}
{ 
    "_id" : "xxx", 
    "value" : {
        "name" : "xxx", 
        "age" : NumberInt(4)
    }
}
{ 
    "_id" : "zzz", 
    "value" : {
        "count" : NumberInt(1)
    }
}

其中name为zzz的数据只有1个。所以在reduce中把count乘以2,在zzz中没有体现。
有没有大神解释一下,是不是跟python的reduce函数一样要接收两个参数还是怎么回事,还有如果只有一个文档的时候怎么对里面的值进行操作?

1个回答

devmiao
devmiao   Ds   Rxr 2016.04.08 05:36
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
mapreduce-在MongoDB中,用MapReduce实现两个有引用关系的集合的统计
关于 mongDB MapReduce 原理 可以参考地址: http://javabeezer.iteye.com/blog/1275124 现在我有一张表video_encode ,其中encodeId,为主键,uploadId为外键。 一个uploadId 对于多个encodeId 。 现在我要统计,每个uploadId,对于几个encodeId.
Java操作MongoDB Map Reduce的使用
因工作需要,把数据库中的旧数据导出并以JSON格式存到本地。考虑到数据量已经达到了十几个G,因此用sql直接查询显然是行不通的。 所以就想到了使用MongoDB,关于MongoDB的安装,Mongo Shell的命令以及基本增删改查操作可以参考CSDN上的其他文章。这里就不多说了。 进入正题,既然是JAVA操作,那么首先需要的就是MongoDB的java驱动包,我使用的是3.4
学习MongoDB 十: MongoDB聚合(Map-Reduce)(二)
MapReduce要实现两个函数:Map和Reduce。Map函数调用emit(key,value)遍历一个或多个集合中所有的记录,进行分组(group by),然后将key与value传给Reduce函数进行处理,输出结果。 (1)MapReduce使用自定义JavaScript函数执行map和reduce操作,所以是基于js引擎,单线程执行,效率不高,比Aggregation复杂,适合用做后台统计等。 (2)MapReduce支持分片操作,可以进行
mongodb中的mapreduce,以及java代码中的做法
map和reduce是十分有用的操作,特别是在NOSQL中.本文简单小结下  在mongodb中对mapreduce的操作,以及在JAVA中如何操作.  1 启动mongodb     mongo启动即可  2 建立db     use test  3 加点记录     > book1 = {name : "Understanding JAVA", pages : 100
MapReduce倒排索引简单实现
倒排索引:
MongoDB mapReduce和Spring Data配合使用详解
经过几天的折腾, 终于弄明白了MongoDB  mapReduce在和Spring Data配合使用的方法,简单来说,首先要弄清楚什么是Map Reduce,为什么我们要用map reduce做统计,一般来说, 对应sql语句的group by的场景,都需要用到map reduce。 map reduce的map函数和reduce函数都是javascript写的,因此先要在mongo client
MapReduce--倒排索引
文档倒排算法简介Inverted Index(倒排索引)是目前几乎所有支持全文检索的搜索引擎都要依赖的一个数据结构。基于索引结构,给出一个词(term),能取得含有这个term的文档列表(the list of documents) Web Search中的问题主要分为三部分: crawling(gathering web content) ,网页爬虫,收集数据 indexing(construc
Mongodb中数据聚合之MapReduce
Mongodb是针对大数据量环境下诞生的用于保存大数据量的非关系型数据库,针对大量的数据,如何进行统计操作至关重要,那么如何从Mongodb中统计一些数据呢? 在Mongodb中,给我们提供了三种用于数据聚合的方式: (1)简单的用户聚合函数; (2)使用aggregate进行统计; (3)使用mapReduce进行统计; 今天我们首先来讲讲mapReduce是如何统计,在后续的文章中,
mongodb中mapreduce的使用以及使用pymongo调用mapreduce
先简单介绍一下map/reduce map函数:接受一个键值对(key-value pair),产生一组中间键值对。MapReduce框架会将map函数产生的中间键值对里键相同的值传递给一个reduce函数。 reduce函数:接受一个键,以及相关的一组值,将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)。 mongodb直接调用mapreduce不是本文重点,因此引述网
MongoDB aggregate,mapreduce,聚合命令的区别
在mongodb中想要完成聚合操作,可以使用以下三种方式;但是很多时候这三个真是傻傻分不清楚,本文是来总结以下三种方式的区别滴~ 1. 聚合框架aggregate pipeline 2. mapreduce 3. 聚合命令group,distinct,count 聚合框架 aggregate pipeline(聚合管道) aggregate 聚合框架是基于数据处理管道模型