刚接触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函数一样要接收两个参数还是怎么回事,还有如果只有一个文档的时候怎么对里面的值进行操作?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。