【发布时间】:2013-03-31 03:12:22
【问题描述】:
我有一个包含 727000 个文档的集合“匹配”。它内部有 6 个字段,没有数组,只有简单的整数和对象 ID。我正在对集合进行如下查询:
matches.find({
$or: [{
homeTeamId: getObjectId(teamId)
}, {
awayTeamId: getObjectId(teamId)
}
],
season: season,
seasonDate: {
'$gt': dayMin,
'$lt': dayMax
}
}).sort({
seasonDate: 1
}).toArray(function (e, res) {
callback(res);
});
结果仅返回大约 7-8 个文档。 查询大约需要 100 毫秒,我认为这很合理,但主要问题是,当我调用方法 toArray() 时,它增加了大约 600 毫秒! 我在笔记本电脑、Intel Core I5、6GB RAM 上运行服务器,但我不敢相信它为 7-8 个文档增加了 600 毫秒。 尝试使用 mongodb-native 驱动程序,现在切换到 mongoskin,仍然得到同样缓慢的结果。 有什么建议吗?
【问题讨论】:
-
callback()是做什么的? -
从函数返回数据。我已将此查询包装在函数 exports.getPrevNextMatches = function(teamId, callback){} 中。但是,当我在没有 toArray() 方法的情况下执行相同操作时,要返回结果游标,如上所述,它需要约 100 毫秒。 toArray() 方法增加了 ~600ms
-
您是否在
find结果上尝试了forEach而不是toArray?我怀疑它会有所帮助,但这是一件容易尝试的事情。另外,explain为您提供的查询是什么?