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
}
我正在将我的 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
}