我有很多需要迭代的集合。我为此使用光标。
但是,我注意到有时会从此光标获取重复的记录。我做了一些阅读,发现可以通过使用快照来解决这个问题。
光标隔离 当游标返回文档时,其他操作可能会与查询交错。对于MMAPv1存储引擎,对文档进行干预的写操作可能会导致游标返回一个文档(如果该文档已更改)多次。要处理这种情况,请参阅“光标快照”中的信息。
但是,我在C#驱动程序(2.7版)中找不到此方法。我在FindFluent
或FindOptions
上都看不到它。
有人可以给我指出一个如何通过C#MongoDB驱动程序创建游标快照的示例吗?
这是我的代码的样子。
private async Task<int> IterateViaCursor<P>(FilterDefinition<User> filter, ProjectionDefinition<User, P> pdef, Func<IEnumerable<P>, Task> callback, int batchSize)
where P : class
{
var o = new FindOptions { BatchSize = batchSize };
var count = 0;
var findFluent = Users.Find(filter, o).Project(pdef);
using (var cursor = await findFluent.ToCursorAsync())
{
while (await cursor.MoveNextAsync())
{
var batchCount = cursor.Current.Count();
count += batchCount;
if (batchCount > 0)
await callback(cursor.Current.ToList());
}
}
return count;
}