spring启动mongotemplate计数查询速度慢

vtwuwzda  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(753)

我正在编写一个api,从mongodb中获取符合所通过标准的文章。例如,如果用户定义了开始和结束日期,它将只在该时间范围内进行搜索。如果他定义了一个源,它将在该时间段内只搜索那些特定的源。除了用户不提供任何标准之外,所有这些都可以很好地工作。在这种情况下,我应该只返回100个项目,如中默认定义的那样 Pageable 参数。排除标准聚合到 Query 目标,他的一切都是这样做的:

List<Article> articles = mongoTemplate.find(query, Article.class);

return PageableExecutionUtils.getPage(articles,
        pageable, 
        () -> mongoTemplate.count(Query.of(query).limit(-1).skip(-1), Article.class));

因为查询是空的,所以它只获取所有文档并对所有项目进行计数。我试着把计数部分硬编码成像1000这样的随机数。在这种情况下,整个操作大约需要200毫秒。但是如果我把它放在 mongoTemplate.count(...) 需要1分30秒。另一方面,如果我通过robo3t和 db.getCollection('articles').find({}).count() 它需要37毫秒。大多数字段都被编入索引,而且有一点低于600000个条目,所以我不知道为什么计数会花费这么长的时间。你知道为什么robo3t和mongotemplate之间会出现这样的时间差异吗?怎么解决?
我也试过用同样的方法查询 MongoRepository ,相同的结果。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题