是FindIterable <document>加载所有文件?

时间:2016-08-26 07:47:08

标签: java mongodb

目前,我正在使用MongoCollection<Document>获取所有文档,返回类型为FindIterable<Document>,然后循环遍历Iterable以处理每个文档。

例如:

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

但是我不知道FindIterable是否会加载所有文档并将其循环,或者它只是加载光标并在循环后获取文档?

1 个答案:

答案 0 :(得分:4)

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

除了免责声明之外,从3.2.x开始,find()调用会在引擎盖下创建一个FindOperationIterable,它使用MongoBatchCursorAdapter作为迭代器,而迭代器又基于BatchCursor。

批处理游标中的javadoc指出:

  

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

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