MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Grouper et compter dans MongoDB

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