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

FindIterable是否加载所有文档?

翁翰墨
2023-03-14

目前,我正在使用MongoCollection

前:

FindIterable<Document> docs = getCollection().find();
for(Document doc : docs) {
    ...
}

但我不知道FindIterable是加载所有文档并循环,还是只是加载光标并在稍后循环时获取文档?

共有1个答案

郑锋
2023-03-14

您需要的是Mongo Java驱动程序的实现细节,因此不是公共接口的一部分,因此不能保证在未来的版本中保持不变。

撇开这个免责声明不谈,从3.2. x开始,查找()调用在后台创建了一个FindOPationIterable,它使用MongoBatchCursorter作为其迭代器,而迭代器又基于BatchCpostor。

批处理光标中的javadoc声明:

MongoDB以批的形式返回查询结果,此接口提供了对这些批的迭代器。对下一个方法的第一次调用将返回第一批,后续调用将触发获取下一批结果的请求。客户端可以通过在调用到下一个方法之间设置batchSize属性来控制批大小

因此,如果当前批次已被完全读取,它将批量读取结果,并再次查询数据库。

 类似资料:
  • 我是一个长期LAMP开发人员,并且习惯在需要时使用autoloader加载类,但直到那时才开始,但现在正在学习Node.js。许多示例显示了加载所有文件的文件夹中的index.js文件。 例如:模型 在我的代码中,我使用 这是首选方法吗? 如果是,为什么? 为什么不使用自动装载机,只在需要的时候加载文件呢? 我在网上搜索,但没有找到任何明确解释这一点的东西。如果你有一篇文章对你有帮助,我将不胜感激

  • 问题内容: 如何将所有从mysql_query的行添加到mysql_fetch_array()?我希望能够尽可能有效地执行此操作,因为它可以处理很多行。 问题答案: 最常见的方式: 如文档中的示例所示。

  • 有没有人看到明显的问题或者知道如何将.trig文件加载到TDB中?

  • 我正在使用Firebase实时数据库为我的Android应用程序存储和检索数据。在我的活动中,我使用从Firebase检索所有数据(例如:用户数据列表)。 我想显示一个进度条,只要数据没有完全从数据库中检索出来。如何检查是否全部检索到了所有数据,以便在加载数据后关闭进度条?

  • 如果我有一个内部类声明,例如: 其次是: A$B内部类也会加载吗?如果B内部类没有被声明为“静态”呢?

  • 问题内容: 我需要一个帮助者来了解是否已加载属性,以避免这种情况。可能吗? 问题答案: 实际上有两种方法。 要确定惰性 属性 是否已初始化,您可以使用实体实例和属性名称作为参数来调用方法。 要查明是否已初始化惰性 集合 (或实体)(如您的示例中所示),可以使用集合(实体)实例作为参数来调用。