MongoDb Java 驱动程序:使用游标获取记录

MongoDb Java Driver: Fetching records using a Cursor

来自 mongodb java 驱动程序文档可在

https://www.mongodb.com/blog/post/getting-started-with-mongodb-and-java-part-ii

关于 java 驱动程序中可用的光标的说明如下。

游标将从数据库中批量获取结果,因此如果您 运行 匹配大量文档的查询,您不必担心每个文档都被加载立即进入记忆。对于大多数查询,返回的第一批将是 101 个文档。但是当您遍历光标时,驱动程序将自动从服务器获取更多批次。因此,您不必担心在应用程序中管理批处理。但是您需要注意,如果您遍历整个游标(例如将其放入一个列表),您最终将获取所有结果并将它们放入内存。

我觉得很混乱。首先它说 "as you iterate over the cursor, the driver will automatically fetch further batches from the server",这是有道理的,因为您不希望它破坏您的本地内存。 然而,它后面有一个矛盾的声明,基本上说如果你遍历整个游标然后,驱动程序会一次性将所有记录从服务器转储到你的本地内存中。

我无法理解这两种说法有何不同。遍历游标和遍历整个游标有什么区别?

我想知道游标在这里究竟是如何工作的,以及迭代游标的最有效方法是什么,这样服务器中的所有记录就不会立即转储到本地内存中,从而导致内存泄漏.

我认为是这样的意思:

迭代 = 获取文档,处理它,获取下一个文档...

迭代整个 = 获取文档,将获取的文档添加到列表,获取下一个文档... 获取所有文档后,处理列表中的所有文档