【问题标题】:C# mongodb driver 2.2.3 how to set batchSize for cursorC# mongodb driver 2.2.3 如何为游标设置batchSize
【发布时间】:2016-04-03 22:09:33
【问题描述】:

我正在使用 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# 中具有相同的行为。 我知道我可以使用 C# 中的游标,但它的默认批处理大小为 4MB。 这太匹配了,无法一次调用返回给客户端。

【问题讨论】:

标签: c# mongodb mongodb.driver


【解决方案1】:

您可以在FindAsyncFindOptions参数中设置批量大小。

这是显式处理批次的基本模式:

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

【讨论】:

  • 非常感谢 JonyHK,我已经检查了个人资料,一切正常。
  • @johnnyHK - 批处理在您的ForEachAsync 场景中是如何工作的?例如,如果您的 batchSize 为 100,并且在这 100 条记录被“处理”之后,您想要记录一些东西 / Console.WriteLine / BulkWriteAsync 或其他东西?
猜你喜欢
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多