我正在使用MongoDB 2.2.3的官方C#驱动程序
如何使用C#驱动程序设置光标的批量大小?
使用javascript我可以创建一个游标并为其设置批量大小:
var cursor = db.statistics.find(query).batchSize(100)
我可以使用以下语句遍历所有项目:
while(cursor.objsLeftInBatch()>0){
var doc = cursor.next();
//process doc
}
我希望在C#中使用async / await支持具有相同的行为。 我知道我可以使用C#中的游标,但它的默认批量大小是4MB。 这太匹配了,无法通过一次通话返回客户端。
答案 0 :(得分:13)
您可以在FindOptions
的{{1}}参数中设置批量大小。
这里是明确处理批次的基本模式:
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