首页 > 解决方案 > findAll() - 从 mongo 获取的数据量有限制吗?

问题描述

我没有那么大的集合,我们只想获取所有文档。我们正在使用 findAll() 它适用于收集 33.5k(45MB) 文档,但收集 130k (50MB) 时出现错误。

我知道我可以通过例如分块(跳过/限制)获得所有元素,但我很好奇:

findAll() 的这个限制是在 spring-data 中,还是只是 mongo?
这个限制有多大?它是基于数据 MB 还是文档数?
我可以以某种方式更改此限制吗?

我们正在使用 spring-data-mongo 2.2.5.RELEASE 和 mongo 3.6.17

标签: javamongodbspring-data-mongodb

解决方案


我有两个报价给你:

第一个:

// Repository
@Query(value="{name: ?0}",
        fields = "{ _id: 1 }")
Stream<Item> getLatestApprovedIdByName(String name);

// Service
default Item getLatestApprovedIdByName(String name) {
    return getLatestApprovedIdByName(name).stream().findFirst().orElse(null);
}

第二: 可分页

// Repository
@Query(value = "{name: ?0,fields = "{ _id: 1 }")
Page<Item> getLatestApprovedIdByName(String name, Pageable pageable);

// Service
default Item getLatestApprovedIdByName(String name) {
    PageRequest request = new PageRequest(0, 1, new Sort(Sort.Direction.DESC, "approval.approvedDate"));
    return getLatestApprovedIdByName(name, request).getContent().get(0);
}

推荐阅读