Mongodb 映射reduce函数返回id而不是count
我正在应用map reduce函数,但面临一个问题。对于一条记录,它返回id,而不是count=1Mongodb 映射reduce函数返回id而不是count,mongodb,mapreduce,mongoengine,Mongodb,Mapreduce,Mongoengine,我正在应用map reduce函数,但面临一个问题。对于一条记录,它返回id,而不是count=1 map_func = """function () { emit(this.school_id, this.student_id); }""" reduce_func = """ function (k, values) { values.length; }
map_func = """function () {
emit(this.school_id, this.student_id);
}"""
reduce_func = """
function (k, values) {
values.length;
}
"""
如果学校100只有一个学生,那么它应该返回学校id 100,值=1,但在这种情况下它会返回
schoolid=100,value=12(12是其学生id,单位为db)。对于其他记录,它工作正常
map_func = """function () {
emit({this.school_id, this.student_id},{count:1});
}"""
reduce_func = """
function (k, values) {
var count =0 ;
values.forEach(function(v)
{
count += v['count'];
});
return {count:count};
}
"""
map_func2 = """
function() {
emit(this['_id']['school_id'], {count: 1});
}
"""
我使用了这个示例,但它使用了两个Map reduce函数,因此花费了更多的时间。看起来您可能误解了mapReduce的一些机制 每个文档都会调用emit,但reduce只会在发出多个值的键上调用(因为reduce函数的目的是将结果数组合并或缩减为一个) 您的映射函数是错误的-它需要发出一个键,然后是一个您想要的值-在本例中是一个计数 reduce函数需要减少这些计数(添加它们),但即使多次调用它,它也必须正常工作(以重新减少以前减少的结果)
我建议您阅读更多详细信息。如果您试图计算每所学校的学生人数: map=“”发射(this.school_id,1)”
reduce=“”函数(key,values){var total=0;for(var i=0;i