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
    });
}
Другие вопросы по тегам