通过 spring-data 迭代 MongoDB 中的大型集合

新手上路,请多包涵

朋友们!

我通过 spring-data 在 java 项目中使用 MongoDB。我使用 Repository 接口访问集合中的数据。对于某些处理,我需要遍历集合的所有元素。我可以使用存储库的 fetchAll 方法,但它总是返回 ArrayList。

但是,假设其中一个集合会很大——多达 100 万条记录,每条至少几千字节。我想在这种情况下我不应该使用 fetchAll,但我既找不到返回某个迭代器(可能允许部分获取集合)的方便方法,也找不到带回调的方便方法。

我看到只支持在页面中检索此类集合。我想知道这是否是处理此类集合的唯一方法?

原文由 Rodion Gorkovenko 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 587
1 个回答

迟到的回应,但也许会在将来帮助某人。 Spring Data 不提供任何 API 来包装 Mongo DB Cursor 功能。它在 find 方法中使用它,但总是返回完整的对象列表。选项是直接使用 Mongo API 或使用 Spring Data Paging API ,类似这样:

         final int pageLimit = 300;
        int pageNumber = 0;
        Page<T> page = repository.findAll(new PageRequest(pageNumber, pageLimit));
        while (page.hasNextPage()) {
            processPageContent(page.getContent());
            page = repository.findAll(new PageRequest(++pageNumber, pageLimit));
        }
        // process last page
        processPageContent(page.getContent());

UPD(!) 此方法 不足以 处理大量数据(请参阅@Shawn Bush 评论)对于此类情况,请直接使用 Mongo API。

原文由 udalmik 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题