findall()-从mongo获取的数据量有限制吗?

wgxvkvu9  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(353)

我没有那么大的藏品,我们只想把所有的文件都拿来。我们正在使用findall(),它适用于33.5k(45mb)文档的集合,但是130k(50mb)集合出现错误。
我知道我可以通过例如分块(skip/limit)获得所有元素,但我很好奇:
findall()的这个限制是在spring数据中,还是只是mongo?
这个限制有多大?它是基于数据mb,还是基于文档计数?
我能改变这个限制吗?
我们使用的是spring数据mongo2.2.5.release和mongo3.6.17

x7yiwoj4

x7yiwoj41#

只是使用 toArray() 列出你所有的文件。

axzmvihb

axzmvihb2#

我有两个提议:
第一:溪流

// 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);
}
hrirmatl

hrirmatl3#

看看mongodb文档和我对mongo大学的总结,mongoshell和mongocompass都没有findall方法,如果你想迭代它们,你必须使用“it”操作符。
所以我假设这个限制来自于负责获取数据的mongo连接器。

相关问题