Das funktioniert einfach nicht wie geschrieben. Das Schlüsselproblem ist hier:key: {"ResultSet.Results.state": true}
. ResultSet.Results
ist ein Array. Wenn Sie nach ResultSet.Results.state
fragen Sie implizieren eine Art von for
Schleife hier durchgeführt werden. Die group
Befehl ist dazu einfach nicht in der Lage.
Versuchen Sie stattdessen das folgende M/R:
map = function() {
// Note that we emit once per result
foreach(var i in ResultSet.Results) {
key = this.ResultSet.Results[i];
value = { count: 1,
quality: this.ResultSet.Results[i].quality,
avg_quality: 0
};
emit(key, value);
}
}
reduce = function(key, values) {
// note that results has same fields as emitted value
var results = { count: 0, quality: 0, avg_quality: 0 };
foreach(var i in values){
results.count += values[i].count;
results.quality += values[i].quality;
// ignore avg_quality, we don't use it
}
return results;
}
Sie müssen auch ein finalize
schreiben für den Durchschnitt.
finalize = function(key, value) {
if (value.count > 0)
value.avg_quality = value.quality / value.count;
return value;
}