目前,我正在使用MongoCollection<Document>
获取所有文档,返回类型为FindIterable<Document>
,然后循环遍历Iterable以处理每个文档。
例如:
FindIterable<Document> docs = getCollection().find();
for(Document doc : docs) {
...
}
但是我不知道FindIterable是否会加载所有文档并将其循环,或者它只是加载光标并在循环后获取文档?
答案 0 :(得分:4)
您要求的是Mongo Java驱动程序的实现细节,因此不是公共接口的一部分,因此不能保证在将来的版本中保持不变。
除了免责声明之外,从3.2.x开始,find()调用会在引擎盖下创建一个FindOperationIterable,它使用MongoBatchCursorAdapter作为迭代器,而迭代器又基于BatchCursor。
批处理游标中的javadoc指出:
&#34; MongoDB以批量和此接口的形式返回查询结果 提供了这些批次的迭代器。第一次打电话给下一个 方法将返回第一批,后续调用将触发 获取下一批结果的请求。客户可以控制 通过在下一次调用之间设置batchSize属性来批量大小。&#34;
因此,如果已完全读取当前批次,它将批量读取结果,并再次查询数据库。