sql >> Base de Datos >  >> NoSQL >> MongoDB

Agrupar y contar en MongoDB

Esto simplemente no funcionará como está escrito. El problema clave está aquí:key: {"ResultSet.Results.state": true} . ResultSet.Results es una matriz. Cuando solicita ResultSet.Results.state estás insinuando algún tipo de for bucle hacerse aquí. El group el comando simplemente no es capaz de hacer esto.

En su lugar, intente el siguiente 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;
}

También tendrás que escribir un finalize para el promedio.

finalize = function(key, value) {
  if (value.count > 0)
    value.avg_quality = value.quality / value.count;

  return value;
}