2010-04-08 12 views
5

Ben MongoDB v1.4 ve mongodb-csharp driver ve ben 10000'den fazla tuş daha bulunan veri deposunda gruba deneyin, bu yüzden bu hatayı alıyorum kullanıyorum:MongoDB'de gruplandırma için 10000'den fazla benzersiz anahtarı işlemek için harita/küçültme nasıl kullanılır?

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

böyle C# kodu kullanarak:

Harita/küçültmeyi kullanmam gerektiğini okudum, ancak nasıl olduğunu anlayamıyorum. Birisi haritayı nasıl kullanacağına/indireceğine biraz ışık tutabilir mi?
Veya bu sınırlamayı aşmanın başka bir yolu var mı?
Teşekkürler.

DÜZENLEME: Anahtar koleksiyonumda 2 sütunun olduğunu unuttum, bunu ekledim. Darin Dimitrov

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

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

cevap

1

aşağıdaki map/reduce işlevleri deneyin.

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(); 
    } 
    } 
} 
+0

Teşekkür: herkes bu ilgi ise

Buna ek olarak, iki alanlara göre bu grup benim çözüm yayınlayacağız. Grubumda 2 sütun olduğunu fark ettim. Soruyu güncelledim. Haritanın kullanılması/azaltılması için bu nasıl mümkün olabilir? –

3

Teşekkür:

İlgili konular