2016-11-20 2 views
1

Meteorでのインデックス作成のmongoクエリを理解しているかどうかわかりません。現在、私のクエリはインデックスに登録されていません。アプリ内のいくつかのページには、15か20のリンクがあり、一意のmongoクエリーを引き起こします。各クエリは個別に索引付けされますか?例えばMeteorでのMongoインデックス作成

、クエリのいずれかのようなものである場合:

Template.myTemplate.helpers({ 
... 
if (weekly === "1") { 
    var firstWeekers = _.where(progDocs, {Week1: "1"}), 
    firstWeekNames = firstWeekers.map(function (doc) { 
    return doc.FullName; 
}); 
return Demographic.find({ FullName: { $in: firstWeekNames }}, { sort: { FullName: 1 }}); 
} 
... 
}) 

どのように私はインデックスのそれぞれを実装するのでしょうか?

+0

MeteorのMongoDB APIのクライアント側実装であるMiniMongoには、インデックスは組み込まれていません。 – MasterAM

答えて

2

まず、minimongo(クライアント側のmongo)がメモリ内で実行されるので、インデックスはディスクよりもはるかに重要です。ネットワーク消費を最小限に抑えるには、一般的に、クライアント上のコレクションをかなり小さくして、クライアント側のインデックス作成をあまり重要視しないようにすることも必要です。

サーバーただし、パフォーマンスの向上には索引付けが重要です。流星のmongoシェル経由

  1. 、すなわちdb.demographic.createIndex({ FullName: 1 })
  2. コレクション2パッケージを使用しているとき、あなたのスキーマにインデックスを作成するためにフィールドを設定経由:サーバー上のセットアップ・インデックスに2つの一般的な方法があります。 aldeed:schema-index
+0

ありがとう、フロイド博士。私のために、クライアントのコレクションを小さくすることは、ブラウザ内のコレクション全体を必要とする社内のアプリケーションであるため、実際には可能性はありません。ユーザーが自分のデータにサインインするサブスクリプションベースのアプリではありません。しかし、コレクションはとにかく巨大ではありません。 –

+0

私は最初の方法と混乱しています。 mongoシェルを使用して、複数のクエリの複数のインデックスがアプリ全体に広がっている場合、どのインデックスがどのクエリに対応するのかをサーバはどのように知っていますか? –

+0

*キーではなく*文書*のインデックスを作成します。一緒に照会される複数のキーに対して[複合インデックス](https://docs.mongodb.com/v3.2/core/index-compound/)を作成することもできます。 mongoがどのようにインデックスを使用しているかを理解したい場合は、[cursor.explain()](https://docs.mongodb.com/v3.2/reference/method/cursor.explain/)を試してみてください。 –