c# - Mongodb Cursor,如何遍历巨大的集合?

标签 c# .net mongodb mongodb-.net-driver mongodb-query

我有一个 MongoDb 数据库,里面有一个非常庞大的集合(超过 200 万个文档)。我想用游标迭代它。同样在迭代期间,我必须对当前文档执行一些操作。

var pending_push_cursor = collection.FindAllAs<PendingPush>();
foreach (PendingPush p_push in pending_push_cursor)
{
    operation_with(p_push)
}

主要问题是操作将元素排入队列,希望在某些时刻迭代暂停(几秒钟)让操作在添加新元素之前处理一些元素。

有没有一种方法可以以某种方式迭代光标,我可以暂停它,然后再恢复? MongodbCursor 保存最后访问的项目?我只知道foreach迭代,但是有这样的迭代吗?

while(pending_push_cursor.isLast()){
    PendingPush p_push= pending_push_cursor.getNext()
    operation_with(p_push)
 }

如果存在类似的东西,我可以保存最后查询的项目。 提前致谢

最佳答案

将 while 循环与游标的枚举器一起使用没有问题(foreach 几乎就是这样做的,因此您可以继续使用它)。

您应该记住,光标在 10 分钟不活动后会超时,您可能会超时,具体取决于您的具体情况。如果是这样,您可以禁用该特定游标的超时。

这是一个简单的例子:

cursor.SetFlags(QueryFlags.NoCursorTimeout);
using (var enumerator = cursor.GetEnumerator())
{
    while (enumerator.MoveNext())
    {
        var item = enumerator.Current;
        // logic

        if (shouldPause)
        {
            Thread.Sleep(1000);
        }
    }
}

关于c# - Mongodb Cursor,如何遍历巨大的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25844492/

相关文章:

c# - 在 Winforms 上配置控件

mongodb - 如何在 MongoEngine 中自动更新更新时间?

mongodb - ( react 性)Mongo 测试失败,返回 : unrecognised field 'snapshot'

mongodb - 许多集合中的一个文档

c# - 使用 linq 的存储库模式

c# - 访问继承属性时是否应该使用 "base."前缀

c# - 如何自动将版本号插入 AssemblyName

c# - 好的C#asp.net开源项目,用于代码研究

c# - Windows 2008 上的 .NET Active Directory 密码过期

c# - 从网站 asp.net 转移到 android 以及从 android 转移到网站 aps.net?