C# mongodb драйвер 2.2.3 как установить batchSize для курсора
Я использую официальный драйвер C# для MongoDB 2.2.3
Как установить размер пакета для курсора с помощью драйвера 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 МБ. Это слишком подходит для возврата клиенту одним вызовом.
1 ответ
Решение
Вы можете установить размер партии в FindOptions
параметр FindAsync
,
Вот базовый шаблон для явной обработки пакетов:
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
});
}