具有C#驱动程序的MongoDB游标快照

时间:2018-11-20 01:59:00

标签: c# mongodb cursor

我有很多需要迭代的集合。我为此使用光标。

但是,我注意到有时会从此光标获取重复的记录。我做了一些阅读,发现可以通过使用快照来解决这个问题。

  

光标隔离   当游标返回文档时,其他操作可能会与查询交错。对于MMAPv1存储引擎,对文档进行干预的写操作可能会导致游标返回一个文档(如果该文档已更改)多次。要处理这种情况,请参阅“光标快照”中的信息。

但是,我在C#驱动程序(2.7版)中找不到此方法。我在FindFluentFindOptions上都看不到它。

有人可以给我指出一个如何通过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;
    }

0 个答案:

没有答案