为什么我的查询在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?
这里有两个因素:
- 对于Mongoose,当所有需要的是文档的JavaScript对象表示而不是完整的Mongoose文档实例时,使用
lean()
选项用于具有较大结果集的查询是很重要的。 - RoboMongo只从查询结果中读取前50个结果(默认情况下),而Mongoose则读取所有100K结果。