2011-10-16 18 views
5

Webアプリケーション用にMongoDBを使用しています。着信要求に対してMongoDBに 'find()'があるとします。 MongoDBコレクションにインデックスを追加するための推奨される方法/場所は何ですか?WebアプリケーションのMongoDBコレクションでインデックスを作成する方法/場所

私は考えることができるオプションのカップル: - アプリケーションの初期化中に、コレクションに

1)「ensureIndex」。 [しかし、最初のアプリケーションの初期化時に私はどのようにして'indexex 'を保証しますか?

2すべての '検索'操作(Webリクエスト)の前に 'ensureIndex'が2つありますか? 'ensureIndex'が既に作成されている場合はインデックスを作成しない場合でも、これはオーバーヘッドではありませんか?

他のオプションはありますか?

ありがとうございます。

答えて

4

アプリケーションを初期化するときに入力します。 ensureIndexを呼び出すときにコレクションが存在しない場合、その時点でインデックス(およびコレクション)が作成されます。

私はあなたがデータ上でどのような種類のクエリを実行するのかを先験的に知っていて、もちろんどのような種類のデータをインデックスに入れていることを前提としています。

+3

+1コレクションが空であっても、 'db.coll.ensureIndex({foo:1})'はフィールド 'foo'にインデックスを作成できます。 – Nikhil

0

アプリケーションを起動するときに確実にensureIndexを実行します。空のコレクションでensureIndexを呼び出すと、インデックスに後でデータが追加されるため、それは問題になりません。

さらに、クエリのベースとなるプロパティによって異なります。たとえば、ログインしたユーザーに基づいてクエリを実行する場合は、ユーザーIDにインデックスを追加する必要があります。

0

あなたのサーバーのコマンドラインから実行されるコレクション用の初期化スクリプトを作成することができます(MongoドキュメントはMongoスクリプトの記述方法とCLIからの実行方法を説明しています)。それから、mongodが始まるといつでも実行されますか?スクリプトは、コレクションオブジェクトに対してensureIndex()を呼び出すことができます。

関連する問題