2010-04-08 2 views
5

Ich bin mit MongoDB v1.4 und die mongodb-csharp driver und ich versuche, auf einem Datenspeicher zu einer Gruppe, die mehr als 10000 Schlüssel hat, so dass ich diesen Fehler:Wie verwendet man map/reduce, um mehr als 10000 eindeutige Schlüssel für die Gruppierung in MongoDB zu behandeln?

assertion: group() can't handle more than 10000 unique keys

C# Code wie folgt verwendet:

Ich lese, dass ich map/reduce verwenden sollte, aber ich kann nicht herausfinden, wie. Kann jemand bitte etwas Licht in die Verwendung von map/reduce bringen?
Oder gibt es eine andere Möglichkeit, diese Einschränkung zu umgehen?
Danke.

EDIT: Ich habe vergessen, dass ich 2 Spalten in meiner Schlüssel-Sammlung, hinzugefügt, dass.

Antwort

1

Probieren Sie die folgenden map/reduce Funktionen:

map = function() { 
    emit(this.myfieldname, 1); 
} 

reduce = function(k, vals) { 
    var sum = 0; 
    for(var i in vals) { 
     sum += vals[i]; 
    } 
    return sum; 
} 
+0

Dank. Ich erkannte, dass ich zwei Spalten in meiner Gruppe habe. Ich habe die Frage aktualisiert. Wie ist das möglich mit map/reduce? –

3

Dank Darin Dimitrov.

Außerdem werde ich meine Lösung, die Gruppe von zwei Feldern veröffentlichen, wenn jemand daran interessiert ist:

string mapFunction = @" 
    function(){ 
    emit({ 
     fieldname:this.fieldname, 
     length:this.length 
    }, 1) 
    }"; 

string reduceFunction = 
@"function(k,vals)   
     { 
     var sum = 0; 
     for(var i in vals) { 
      sum += vals[i]; 
     } 
     return sum; 
     }"; 

IMongoCollection mrCol = db["table"]; 

using (MapReduceBuilder mrb = mrCol.MapReduceBuilder().Map(mapFunction).Reduce(reduceFunction)) 
{ 
    using (MapReduce mr = mrb.Execute()) 
    { 
    foreach (Document doc in mr.Documents) 
    { 
     // do something 
     int groupCount = Convert.ToInt32(doc["value"]); 

     string fieldName = ((Document)doc["_id"])["fieldname"].ToString(); 
    } 
    } 
} 
Verwandte Themen