Cela ne fonctionnera tout simplement pas comme écrit. Le problème clé est ici :key: {"ResultSet.Results.state": true}
. ResultSet.Results
est un tableau. Lorsque vous demandez ResultSet.Results.state
vous impliquez un certain type de for
boucle être fait ici. Le group
la commande n'est tout simplement pas capable de cela.
Essayez plutôt le M/R suivant :
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;
}
Vous devrez également écrire un finalize
pour la moyenne.
finalize = function(key, value) {
if (value.count > 0)
value.avg_quality = value.quality / value.count;
return value;
}