java - Spring Boot mongoTemplate 计数查询很慢
问题描述
我正在编写一个 API 来从我的 mongoDB 中获取与通过的条件相对应的文章。例如,如果用户定义了开始和结束日期,它将仅在该时间范围内进行搜索。如果他定义了一个来源,它将在该时间段内仅搜索那些特定的来源。除了用户不提供任何标准时,这一切都运行良好。在这种情况下,我应该只返回Pageable
参数中默认定义的 100 篇文章。排除标准聚合到一个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 毫秒。大多数字段都已编入索引,并且条目数略低于 600,000,所以我不知道为什么计数需要这么长时间。任何想法为什么 robo3t 和 mongoTemplate 之间存在这种时间差异以及如何解决它?
我也尝试过使用MongoRepository
相同的结果进行相同的查询。
解决方案
推荐阅读
- java - 如何配置 TestNG 在 IntelliJ 中只运行一个测试用例?
- node-red - 在 Raspberry Pi 4 上运行的 Azure Edge 中的 Node-RED 模块提示“退避”错误
- tvos - 如何为 tvOS 包含 1x 1080p 和 2x 4K 视频资产
- python - 熊猫,更改数据框中的特定单元格
- c# - prim 算法生成迷宫缺失的墙壁
- css - 即使我有自定义 webpack.config.js,webpack 也会继续使用默认配置
- python - Discord.py 在单独的线程上运行命令
- excel - 复制其中包含 NaN 值的列并添加前缀
- ios - 如何在 Swift 5 中的 Xcode Playground 中创建委托设计模式?
- c# - TopShelf 服务安装不工作