C# MongodbCursor,如何遍历庞大的集合?

C# MongodbCursor,如何遍历庞大的集合?,c#,.net,mongodb,mongodb-.net-driver,mongodb-query,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) } 如果存在类似的内容,我可以保存最后查询的项目。 提前

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

var pending_push_cursor = collection.FindAllAs<PendingPush>();
foreach (PendingPush p_push in pending_push_cursor)
{
    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#和Visual Studio 2014A最大的问题是我使用的是MVC ASP.NET,因此使用thread.sleep是正确的。我想暂停光标,直到调用“回调”操作或类似操作,但我不知道how@xabier这只是一个例子。您可以使用
wait Task.Delay(1000)
而不阻塞线程,或者等待一些
AutoResetEvent
,这并不重要。重要的是,只要不调用
MoveNext
枚举器,枚举器就保持在同一位置。最后别忘了把它处理掉。
cursor.SetFlags(QueryFlags.NoCursorTimeout);
using (var enumerator = cursor.GetEnumerator())
{
    while (enumerator.MoveNext())
    {
        var item = enumerator.Current;
        // logic

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