【发布时间】:2012-06-18 06:05:43
【问题描述】:
朋友们!
我通过 spring-data 在 java 项目中使用 MongoDB。我使用 Repository 接口来访问集合中的数据。对于某些处理,我需要遍历集合的所有元素。我可以使用存储库的 fetchAll 方法,但它总是返回 ArrayList。
但是,假设其中一个集合会很大 - 最多 100 万条记录,每个记录至少有几千字节。我想我不应该在这种情况下使用 fetchAll,但是我找不到返回一些迭代器的方便方法(这可能允许部分获取集合),也找不到带有回调的方便方法。
我看到只支持在页面中检索此类集合。我想知道这是否是处理此类集合的唯一方法?
【问题讨论】:
-
您可以使用
limit()函数来限制函数以块的形式检索数据 -
我不熟悉您使用的框架,但如果它没有 MongoDB 游标的一些包装器,我会觉得很奇怪。您确定您得到的是
ArrayList,而不是环绕光标的自定义List实现吗? -
是的,当然 - 我刚刚记录了它的 findAll().getClass() 收集了大约 300 万个,我想我看到了 java.util.ArrayList...
-
从 Spring Boot 2 开始,您可以使用 streamAllBy() 一次只加载一个条目。