与MongoDB Compass相比,MongoDB countDocuments()在Scala中的速度非常慢

与MongoDB Compass相比,MongoDB countDocuments()在Scala中的速度非常慢,mongodb,scala,mongoose,mongodb-query,Mongodb,Scala,Mongoose,Mongodb Query,我试图让MongoDB根据where子句计算文档数 def headResult(): C = Await.result(observable.head(), Duration(10, TimeUnit.SECONDS)) val database: MongoDatabase = mongoClient.getDatabase("dbname") val collection: MongoCollection[Document] = database.getCollection(

我试图让MongoDB根据where子句计算文档数

  def headResult(): C = Await.result(observable.head(), Duration(10, TimeUnit.SECONDS))

  val database: MongoDatabase = mongoClient.getDatabase("dbname")
  val collection: MongoCollection[Document] = database.getCollection("tablename")
  val recordCount = collection.countDocuments()
            .headResult() 
此查询返回的计数为766 782,但需要2-2.5秒。当我通过MongoDB Compass进行相同的查询时,需要0.2秒

  db.tbltrackerdata.find({},{}).count()

因为where子句是动态的,所以我无法保存之前的内容或为此维护任何元数据

这不是因为Scala。这是因为
db.collection.count({})
db.collection.find({}).count()
实际上并没有获取文档。相反,它只是从集合的元数据中检索文档的数量

countDocuments
方法执行适当的聚合,预计聚合速度较慢,但也更准确。您可以在MongoDB文档中看到它:

所以这不是同一个查询。您是否尝试在MongoDB Compass中添加相同的过滤器,并查看需要多长时间?它们可能不是IndexeDiges,我保持过滤器不变。。。指南针的响应速度非常快,但仅使用Scala驱动程序需要一些时间。我不知道如何和为什么,但你在compass查询中显示一个空过滤器?所以我更新了我的问题。另外,我怀疑这是因为Scala,它很慢。在某些地方,我看到scala中的游标在golang代码中相对较慢。可能吗?