FindIterable 是否加载所有文档?

2023-12-29

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

Ex:

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

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


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

撇开这个免责声明不谈,从 3.2.x 开始,find() 调用在底层创建了一个 FindOperationIterable,它使用 MongoBatchCursorAdapter 作为其迭代器,而迭代器又基于 BatchCursor。

批处理游标中的 javadoc 指出:

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

因此,它会分批读取结果,如果当前批次已读取完毕,则再次查询数据库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FindIterable 是否加载所有文档? 的相关文章

随机推荐