为什么我的查询在mongoose上花了13秒,在robomongo花了0.7秒?

我需要对大约100K个文档的集合执行这个简单的查询:

db.foobar.find().sort({ score: -1 }) 

我的文件很小:

 { "_id" : ObjectId("566acb77ddf99fd8989fafed"), "score" : 123, "username" : "John Smith" } 

我使用Robomongo来testing我的数据库上的一些查询,并在0.7秒的平均响应时间内执行提到的查询

我试图在一个静态函数的mongoose执行相同的查询。

这是我的代码:

 leaderboardSchema.statics.getRank = function (callback) { var query = this.find().sort({ score: -1 }); query.exec(function (err, records) { if (err) { return callback(err); } callback(null, records); }); }; 

但是当我执行查询时,我必须等待13秒才能得到结果!

我错过了什么? 为什么mongoose这么久,而不是Robomongo?

这里有两个因素:

  1. 对于Mongoose,当所有需要的是文档的JavaScript对象表示而不是完整的Mongoose文档实例时,使用lean()选项用于具有较大结果集的查询是很重要的。
  2. RoboMongo只从查询结果中读取前50个结果(默认情况下),而Mongoose则读取所有100K结果。