另一个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
希望你能帮助我:)。