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;
}