3

我有一个包含 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,仍然得到同样缓慢的结果。有什么建议么 ?

4

1 回答 1

3

toArray() 方法迭代抛出所有游标元素并将它们加载到内存中,这是一个成本很高的操作。也许您可以添加索引以提高查询性能,和/或避免 toArray 迭代自己抛出 Cursor。

问候, 莫西

于 2013-05-01T17:50:00.280 回答