2010-04-08 9 views
5

मैं MongoDB v1.4 और mongodb-csharp driver और मैं 10000 से अधिक कुंजी है कि एक डेटा संग्रह पर समूह की कोशिश करते हैं, तो मैं यह त्रुटि प्राप्त उपयोग कर रहा हूँ:MongoDB में समूहबद्ध करने के लिए 10000 से अधिक अद्वितीय कुंजी को संभालने के लिए मानचित्र का उपयोग कैसे करें?

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

इस तरह सी # कोड का उपयोग:

Document query = new Document().Append("group", 
new Document() 
.Append("key", new Document().Append("myfieldname", true).Append("length", true)) 
.Append("$reduce", 
     new CodeWScope(
      "function(obj,prev) { prev.count++; }")) 
.Append("initial", new Document().Append("count", 0)) 
.Append("ns", "myitems")); 

मैंने पढ़ा कि मुझे मानचित्र/कम करने का उपयोग करना चाहिए, लेकिन मैं यह नहीं समझ सकता कि कैसे। क्या कोई नक्शा/कम करने के तरीके पर कुछ प्रकाश डाल सकता है?
या इस सीमा को पाने के लिए कोई और तरीका है?
धन्यवाद।

संपादित करें: मैं भूल गया कि मेरे पास मेरे मुख्य संग्रह में 2 कॉलम हैं।

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

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

उत्तर

1

निम्नलिखित map/reduce कार्यों की कोशिश करो।

इसके अलावा, मैं अपने समाधान है कि समूह के दो क्षेत्रों से, पोस्ट करेंगे अगर कोई भी व्यक्ति उस में रुचि रखता है:

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

धन्यवाद। मुझे एहसास हुआ कि मेरे समूह में मेरे पास 2 कॉलम हैं। मैंने सवाल अपडेट किया। नक्शा/कम करने के उपयोग से प्राप्त करना संभव है? –

3

डैरिन दिमित्रोव के लिए धन्यवाद: