当前位置: 首页 > 知识库问答 >
问题:

MongodbCursor,如何在庞大的集合中迭代?

长孙泉
2023-03-14
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)
 }

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

共有1个答案

柴飞扬
2023-03-14

在游标的枚举器中使用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);
        }
    }
}
 类似资料:
  • 问题内容: 我收集了约100万条记录,每个记录有20个字段。我需要更新每个记录(文档)中的整数字段,并向该字段随机分配1或2 。在游标遍历整个集合时如何执行此操作?第二次搜索MongoDB已经找到的对象只是为了能够更新它似乎不是一个好主意: 如何有效地更新具有不同值的巨大MongoDB集合的每个文档中的字段? 问题答案: 您的方法基本上是正确的。但是,我不会将这样的集合视为“巨大的”。您可以从sh

  • 是否可以在java中并行地迭代一个集合。我正在中寻找类似C#的东西-命名空间

  • 问题内容: 我有一个巨大的数据集,其中包含数千行,每个行具有大约10个字段,大约2MB的数据。我需要在浏览器中显示它。最简单的方法(获取数据,将其放入,执行其工作)可以很好地工作,但是当它开始将节点插入DOM时,它会使浏览器冻结大约半分钟。我应该如何解决这个问题? 一种选择是将行逐行追加,并等待完成向DOM中插入一个块后再移至下一个。但是AFAIK ngRepeat在完成“重复”操作时不会返回报告

  • 我正在使用Flutter和Cloud FiRecovery构建一个Instagram克隆,我正在尝试像这样构建数据库: 收藏(“时间线”) 实际上看起来像这样: 阅读项目标题,例如,很容易。我可以渲染一个Listview.builder并使用: 但是我如何遍历每个项目的评论子集合?我尝试了嵌套的Listview和this,但我无法访问elementAt(index)的子集合: 或者有没有更好的方法

  • 问题内容: 我正在研究一个难题,其中涉及分析所有大小的k个子集,并找出哪个子集是最佳的。我写了一个解决方案,当子集的数量很少时可以使用,但是对于较大的问题,它用尽了内存。现在,我正在尝试将用python编写的迭代函数转换为java,以便我可以在创建每个子集时对其进行分析,并仅获取代表其优化程度的值,而不是整个集的值,以便不会耗尽记忆。这是我到目前为止的内容,即使很小的问题也似乎还没有解决: 有人可

  • 问题内容: 我正在对JRE 进行迭代,该JRE 强制执行快速失败迭代器概念,因此如果在迭代时修改了,则会抛出a ,而不是使用method。但是,如果对象满足条件,则需要删除该对象的“逻辑伙伴”。从而阻止伙伴也被处理。我怎样才能做到这一点?也许为此使用更好的收集类型? 例。 谢谢。 问题答案: 您要从列表中删除项目,然后继续在同一列表中进行迭代。您是否可以实施两步解决方案,即在步骤1中将要删除的项目