sql >> Database >  >> NoSQL >> MongoDB

Groeperen en tellen in MongoDB

Dit werkt gewoon niet zoals geschreven. Het belangrijkste probleem is hier:key: {"ResultSet.Results.state": true} . ResultSet.Results is een array. Wanneer u om ResultSet.Results.state . vraagt je suggereert een soort for lus hier worden gedaan. De group commando is hier gewoon niet toe in staat.

Probeer in plaats daarvan de volgende 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;
}

Je moet ook een finalize . schrijven voor het gemiddelde.

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

  return value;
}


  1. MongoDB-aggregatie:dubbele lookup en lookup-reactie samenvoegen met respectief object

  2. Hoe scheidt redis de instantie met meerdere gebruikers die op dezelfde server wordt uitgevoerd?

  3. Time-outuitzondering na asynchrone opdrachten en Task.WhenAny wacht in StackExchange.Redis

  4. Mongo DB:kan geen sharding-cluster maken in Ubuntu