Spring + MongoDB 自定义查询运行缓慢

Kan*_*ghu 5 java mongodb spring-data spring-data-mongodb spring-boot

我有一个约 7000 个文档的 MongoDB 集合(称为“产品”),托管在 Mongo Atlas 共享集群上,看起来有点像这样:

{
   identifier: 123,
   archived: true,

   /* Some other properties.. */
}
Run Code Online (Sandbox Code Playgroud)

尝试以如下方式对上述集合运行简单查询:

mongoTemplate.find(
      new Query().addCriteria(Criteria.where("archived").is(false)), 
      Product.class, 
      "Products");
Run Code Online (Sandbox Code Playgroud)

导致执行时间非常长,在本地实例和部署 (Heroku) 版本上都为 8~9 秒。但是,当直接从MongoRepository<>,例如 运行相同的查询时repository.findByArchived(false),查询几乎立即运行(就像在 mongo CLI 中所做的那样)。

我是否遗漏了一些阻止mongoTemplate以更流畅的方式运行查询的附加配置,MongoRepository例如预先配置的(例如某些 bson/POJO 编码)?对此的任何帮助将不胜感激!

小智 0

很难说到底是什么导致了自定义查询缓慢,但 atlas 提供了多种工具来帮助分析集群上执行的缓慢查询。

Performance Advisor 监视 MongoDB 认为速度慢的查询,并建议新索引以提高查询性能。一定要读一读 - Performance Advisor