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、6 GB RAM でサーバーを実行していますが、7 ~ 8 ドキュメントで 600 ミリ秒かかるとは信じられません。mongodb-native ドライバーを使用してみましたが、今は mongoskin に切り替えましたが、同じ遅い結果が得られました。助言がありますか ?

4

1 に答える 1

3

toArray() メソッドは、すべてのカーソル要素を繰り返しスローしてメモリにロードします。これは非常にコストのかかる操作です。おそらく、インデックスを追加してクエリのパフォーマンスを向上させたり、 toArray を繰り返してカーソルをスローしたりするのを避けることができます。

よろしく、 モアシー

于 2013-05-01T17:50:00.280 に答える