MongoDBで複数フィールドにインデックスを作成する方法|ensureIndex()による複合インデックスの作り方
MongoDBで複数のフィールドに対してインデックスを作成したい場合は、ensureIndex()メソッドを使用して複合インデックス(Compound Index)を作成します。このメソッドでは、単一のフィールドだけでなく、複数のフィールドを組み合わせた形で1つのインデックスを定義することが可能です。
ここでは、「学生の名前」と「年齢」、「学生の名前」と「国名」という2つの異なるフィールドの組み合わせでインデックスを作成する例を見ていきましょう。
ensureIndex()で複合インデックスを作成する
まず、コレクションに対して2つのフィールドの組み合わせでインデックスを作成します。
> db.demo53.ensureIndex({"StudentFirstName":1,"StudentAge":1});
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.demo53.ensureIndex({"StudentFirstName":1,"StudentCountryName":1});
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 2,
"numIndexesAfter" : 3,
"ok" : 1
}上記のコマンドでは、最初のensureIndex()で「StudentFirstName」と「StudentAge」の複合インデックスが作成され、2回目の実行で「StudentFirstName」と「StudentCountryName」の組み合わせのインデックスが追加されています。numIndexesAfterの値が増えていることから、インデックスが正しく登録されたことが確認できます。
テスト用ドキュメントを挿入する
次に、動作確認のためのサンプルドキュメントをinsertOne()メソッドで挿入します。
> db.demo53.insertOne({"StudentFirstName":"Chris","StudentAge":21,"StudentCountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e271431cfb11e5c34d89911")
}
> db.demo53.insertOne({"StudentFirstName":"David","StudentAge":23,"StudentCountryName":"UK"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e27143ccfb11e5c34d89912")
}
> db.demo53.insertOne({"StudentFirstName":"Mike","StudentAge":24,"StudentCountryName":"AUS"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e27144bcfb11e5c34d89913")
}find()メソッドで全ドキュメントを表示する
挿入したすべてのドキュメントを表示するには、find()メソッドを使用します。
> db.demo53.find();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e271431cfb11e5c34d89911"), "StudentFirstName" : "Chris", "StudentAge" : 21, "StudentCountryName" : "US" }
{ "_id" : ObjectId("5e27143ccfb11e5c34d89912"), "StudentFirstName" : "David", "StudentAge" : 23, "StudentCountryName" : "UK" }
{ "_id" : ObjectId("5e27144bcfb11e5c34d89913"), "StudentFirstName" : "Mike", "StudentAge" : 24, "StudentCountryName" : "AUS" }補足:createIndex()の使用を推奨
なお、ensureIndex()は古いバージョンのMongoDBで使われていたメソッドであり、現在は非推奨(deprecated)となっています。最新のMongoDBでは、同じ機能を持つcreateIndex()メソッドの使用が推奨されているため、新規開発では以下のように書き換えるとよいでしょう。
> db.demo53.createIndex({"StudentFirstName":1,"StudentAge":1});複合インデックスを活用することで、複数条件を含むクエリの検索パフォーマンスを大幅に向上させることができます。特に読み取り処理が多いアプリケーションでは、よく使われる検索条件の組み合わせに基づいてインデックスを設計することが重要です。
-
MongoDBでドキュメントのフィールドにアクセスする方法|find()とプロジェクションの使い方
MongoDBでドキュメント内のフィールドにアクセスするには、find()メソッドを使用します。この記事では、実際にコレクションを作成し、ドキュメントを挿入したうえで、特定のフィールドだけを取得する方法をサンプルコード付きで解説します。 コレクションの作成とドキュメントの挿入 まず、サンプル用のコレクション「demo565」を作成し、3件のドキュメントを挿入します。insertOne()メソッドを使って、1件ずつ登録していきましょう。 > db.demo565.insertOne( ... { ... id:101, ... Name:David, ... Countr
-
MongoDBの集計パイプラインで複数フィールドをカウントする方法($facet活用)
MongoDBで複数のフィールドごとにドキュメントをカウントしたい場合、$facet演算子を使うのが効果的です。$facetは、同じ入力ドキュメント群に対して、単一のステージ内で複数の集計パイプラインを同時に処理できる強力な機能です。この記事では、実際にコレクションを作成し、$facetを組み合わせた集計クエリで複数フィールドの値をカウントする手順を解説します。1. サンプルコレクションの作成まず、insertOne()メソッドを使ってサンプルドキュメントを挿入します。各ドキュメントにはdetails1・details2・details3という3つのネストされたフィールドを持たせます。>