MapReduce与MongoDB。如何在一个文档中存储许多结果?

时间:2016-01-29 14:51:18

标签: mongodb

另一个MongoDB问题。 我有一个包含如下文档的集合:

{
    "_id" : ObjectId("56ab6d594dfb5ab07e0b0c1b"),
    "docid" : 698,
    "term" : "xhtml",
    "score" : 0.033
}

对于每个docid,有多个文档具有唯一的docid/term组合。对于每个学期,都有一个分数值。

我想要实现的是计算每个average score的{​​{1}}值。

我尝试使用MongoDB MapReduce。

我的地图功能:

term

我的缩减功能:

var map = function() {
    emit(this.term, this.score);
}

MapReduce完成没有错误,但输出格式不是我期望的那样。

var reduce = function(key, values) {
    var sum = 0;
    for(var i = 0; i < values.length; i++) {
        sum += parseFloat(values[i]);
    }
    var avg = sum/values.length;
    return avg;
}

问题是我不明白为什么{ "_id" : NaN, "value" : 0.20074305555555552 } { "_id" : 0, "value" : 0.08428939198197966 } { "_id" : 1, "value" : 0.13808291796629674 } { "_id" : 2, "value" : 0.14154431740366513 } { "_id" : 3, "value" : 0.12549153892074566 } { "_id" : 4, "value" : 0.19003114590495843 } { "_id" : 5, "value" : 0.10077870909142886 } { "_id" : 6, "value" : 0.13208640358753815 } { "_id" : 7, "value" : 0.1474313158427689 } { "_id" : 8, "value" : 0.21607424755041157 } { "_id" : 9, "value" : 0.11993136619256084 } { "_id" : 10, "value" : 0.2146284765047667 } 字段只包含数字。我认为它将包含发出的键值,它是一个字符串。

是否可以只创建一个包含所有术语及其各自平均分数的输出文档,如下文所述?

_id

希望你能帮助我:)。

0 个答案:

没有答案