この章では、MongoDBのインデックスについて紹介します。MYSQLと同様に、MongoDBもインデックスをサポートしています。違いは、MongoDBがJSON構造の任意のネストされたフィールドにインデックスを追加することができ、クエリの効率を向上させるという点です。

MongoDBのインデックスの種類

単一フィールドインデックス

MYSQLと同様に、単一フィールドにインデックスを作成します。

フォーマット:

db.collection.createIndex( { field_name: sorting_direction(1 or -1) } )

注意: sorting_direction 1 は昇順、-1 は降順を表します。

例1:

db.records.createIndex( { score: 1 } )

scoreフィールドのインデックスを作成します。

例2:

db.records.createIndex( { "location.state": 1 } )

ネストしたJSONフィールドlocation.stateのインデックスを作成します。

複合インデックス

MYSQLと同様に、複数のフィールドを組み合わせてインデックスを作成し、複合クエリのスピードを加速させることができます。

フォーマット:

db.collection.createIndex( { <field1>: <type>, <field2>: <type2>, ... } )

例:

db.products.createIndex( { "item": 1, "stock": 1 } )

itemフィールドとstockフィールドの複合インデックスを、どちらも昇順で作成します (1 は昇順を表します)。

テキストインデックス(全文検索インデックス)

テキストインデックス(text)は主に全文検索をサポートするために使用されます。

注意: コレクションは1つのテキストインデックスのみを許可しますが、テキストインデックスには複数のフィールドを含めることができます。

例:

db.stores.createIndex( { name: "text", description: "text" } )

nameとdescriptionフィールドのための全文検索インデックスを作成します。

注意: 詳細は、全文検索インデックスセクションを参照してください。

空間インデックス(GEO インデックス)

主に地理情報関連のクエリをサポートするために使用され、主に2つの種類のインデックス、2dsphereと2dをサポートしています。詳細については、地理空間クエリセクションを参照してください。

インデックスの削除

コレクション内のすべてのインデックスをリスト表示するには:

db.pets.getIndexes()

petsコレクションからcatIdxインデックスを削除するには:

db.pets.dropIndex( "catIdx" )