AggregateOption MongoDB 如何迭代 C# Mongodb.Driver

AggregateOption MongoDB how to iterate C# Mongodb.Driver

我正在将我的 MongoDb 聚合管道列表转换为 BatchSize 操作,但我不确定在创建 BatchSize 为 100000 的选项后如何遍历批次。我可以在列表中有 800K或者我可以有 64M.

我有以下选项:

//Batch size
AggregateOptions aggOptions = new AggregateOptions();
aggOptions.BatchSize = 100000;

我的流水线是这样的:

 var sample = (entityCollection.Aggregate(aggOptions)
                       .Match(dateFilterString)
                       .Project(projectString));

而我拥有的是:

await sample.ForEachAsync(doc =>
 {
    var test = doc.ToList();

    Console.WriteLine("### Count ###: " + test.Count());

  }
);

我不想在每个批次中一个一个地迭代,但想应用一个如果批次存在 MoveNextAsync 或 hasNext() 并应用类似这样的东西 8 次,这可能吗?或者 Select 语句做同样的事情并做一个循环?什么是最有效的?

var keys = (entityCollection.Aggregate()
    .Match(dateFilterString)
    .Project(projectString)
    .Limit(100000)
    .ToList())
 .Select(x => (x[2][0].ToString().Substring(15, 32))).ToArray();

内部ForEachAsync使用一个IAsyncCursor<MyEntityType>迭代批次,可以像这样获取和迭代:

var sample = (entityCollection.Aggregate(aggOptions)
                       .Match(dateFilterString)
                       .Project(projectString));

var cursor = sample.ToCursorAsync();

while (await cursor.MoveNextAsync())
{
    IEnumerable<MyEntityType> batch = cursor.Current;
    // do whatever you need to do with the batch here
}