2016-04-03 16 views
4

için BatchSize nasıl ayarlanır C# sürücüsü kullanılarak imleç için toplu boyutunu ayarlayabilir?C# mongodb sürücüsü 2.2.3 nasıl MongoDB 2.2.3</p> <p>için ben resmi C# sürücüsü kullanıyorum imleç

var cursor = db.statistics.find(query).batchSize(100) 

ve ben şu ifadeyi kullanan tüm öğeler arasında yineleme yapabilirsiniz: Ben bunun için bir imleç ve set toplu boyutu oluşturabilir javascript ile

while(cursor.objsLeftInBatch()>0){ 
    var doc = cursor.next(); 
    //process doc 
} 

Ben istiyorum C# ile aynı davranışı async/bekliyor desteği ile. Ben C# imleci kullanabileceğinizi biliyor ama varsayılan parti boyutu var 4MB olduğunu. Bu da bir çağrı ile müşteriye geri dönmek için maç edilmektedir.

+0

MongoDB Eski API yapar toplu boyutu kontrol etmek için yöntem sağlamak ancak modern API hakkında emin değilim. http://api.mongodb.org/csharp/current/html/P_MongoDB_Driver_MongoCursor_BatchSize.htm size çok JonyHK ederiz – Saleem

cevap

4

Sen FindAsync arasında FindOptions parametrede toplu boyutunu ayarlayabilirsiniz.

Burada açıkça toplu işlemek için temel desen var:

var filter = new BsonDocument(); 
var options = new FindOptions<BsonDocument> 
{ 
    // Get 100 docs at a time 
    BatchSize = 100 
}; 

using (var cursor = await test.FindAsync(filter, options)) 
{ 
    // Move to the next batch of docs 
    while (await cursor.MoveNextAsync()) 
    { 
     var batch = cursor.Current; 
     foreach (var doc in batch) 
     { 
      // process doc 
     } 
    } 
} 

Ama aynı zamanda imlecin üzerinde ForEachAsync çağırabilir ve toplu talep üzerine şeffaf getirilen olacaktır:

using (var cursor = await test.FindAsync(filter, options)) 
{ 
    await cursor.ForEachAsync(doc => 
    { 
     // process doc 
    }); 
} 
+0

görüyorum, her şey düzgün çalışır profiliyle bunu kontrol ettirin. – denisvlah

İlgili konular