2011-03-15 2 views
10

ensureIndex()が存在しない場合は、実際にコレクションを作成することがあります。しかし、インデックスは常にすべてのフィールドではなく、いくつかのフィールドにあります。つまり、{ name:1 }のインデックスを確保して、そのコレクションに文書を追加すると、インデックスがさらに機能します。私はスキーマを持っていないことを知っています、RDBMSの世界から来て、私は確信しています。 :)私は私のウェブサイトが始まるときにインデックスを作成したいが、最初はデータベースが空である。インデックスを確保する前にデータを取得する必要はありませんが、それは正しいですか?存在しないコレクションでensureIndexを呼び出すことはできますか?

答えて

9

ensureIndexまだ存在しない場合はコレクションを作成します。インデックスがカバーするプロパティを持たないドキュメントを追加しても、そのインデックスを使用してそれらのドキュメントを見つけることはできません。 1.7.4より前のバージョンでは、インデックスがあるプロパティが見つからないドキュメントは、そのプロパティを持つようにインデックスされますが、null値になります。 1.7.4以降のバージョンでは、これらのオブジェクトをまったく含まない疎なインデックスを作成することができます。違いはわずかですが、状況によっては重大な場合もあります。

場合によっては、アプリケーションの起動時にインデックスを作成することはお勧めできません。新しいバージョンをデプロイして起動時に新しいインデックスを追加する状況を考えてみましょう。開発では小さなデータベースしかないので気づかないでしょうが、実稼働環境ではデータベースが膨大になり、インデックスを追加するには多くの時間がかかります時間の。インデックスの作成中にアプリがハングし、リクエストを処理できません。バックグラウンドフラグをtrueに設定してインデックスを作成することもできます(構文は使用するドライバによって異なります)。ほとんどの場合、手動でインデックスを追加する方がよいでしょう。そうすれば、インデックスを更新する前に考える必要があります。

+0

私はASP.NET MVCと公式のC#ドライバを使用していますが、技術的には問題はないと感じています。興味深いと思うが、私はコマンドラインから 'ensureIndex'を呼び出す方法を見つける必要があります。 –

+0

mongoシェルを通してロードされたJSスクリプトから 'ensureIndex'を呼び出すことができるはずです。 –

+0

'mongo db_name script.js'でJavaScriptファイルを実行できます。このファイルには、Mongoコンソールに入力できるほとんどのものが含まれています。 – Theo

関連する問題