2016-04-03 2 views
4

Я использую официальный драйвер C# для MongoDB 2.2.3C# MongoDB драйвер 2.2.3 как установить BATCHSIZE для курсора

Как я могу установить размер пакета для курсора с помощью драйвера C#?

С помощью JavaScript можно создать курсор и установить размер пакета для него:

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

и я могу перебрать все пункты, используя следующую инструкцию:

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

Я хотел бы иметь такое же поведение в C# с поддержкой async/await. Я знаю, что я могу использовать курсор из C#, но размер пакета по умолчанию - 4 МБ. Это слишком похоже на возврат клиенту с помощью одного вызова.

+0

MongoDB наследие API делает предоставить метод контроля размера партии, но я не уверен в современном API. см. http://api.mongodb.org/csharp/current/html/P_MongoDB_Driver_MongoCursor_BatchSize.htm – Saleem

ответ

4

Вы можете установить размер партии в параметре FindOptionsFindAsync.

Вот основная схема явно обрабатывать партии:

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 
     } 
    } 
} 

Но вы также можете позвонить ForEachAsync на курсоре и партии будет прозрачно скопирована по требованию:

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

Большое спасибо JonyHK, я проверил его с профилем, все работает нормально. – denisvlah

 Смежные вопросы

  • Нет связанных вопросов^_^