我正在编写一个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
,相同的结果。
暂无答案!
目前还没有任何答案,快来回答吧!