MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでインデックスを活用して配列や内部アイテムの値を取得する方法

MongoDBでは、ドキュメント内のネストされたフィールドや配列要素に対してインデックスを作成することで、検索パフォーマンスを大幅に向上させることができます。本記事では、ensureIndex()を使ってインデックスを作成し、そのインデックスを活用して値を取得する具体的な手順を解説します。

コレクションの作成とインデックスの設定

まず、ドキュメントを含むコレクションを作成し、ensureIndex()を使用してインデックスを作成します。ここでは、ネストされたdetails.Nameフィールドに対してインデックスを設定します。

> db.demo323.insertOne({"details":{"Name":"Chris","Age":34}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e51157af8647eb59e56206e")
}
> db.demo323.insertOne({"details":{"Name":"David","Age":31}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e511581f8647eb59e56206f")
}
> db.demo323.insertOne({"details":{"Name":"Bob","Age":28}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e511589f8647eb59e562070")
}
> db.demo323.ensureIndex({"details.Name":1});
{
   "createdCollectionAutomatically" : false,
   "numIndexesBefore" : 2,
   "numIndexesAfter" : 3,
   "ok" : 1
}

上記の実行結果から、インデックスが正常に作成され、インデックス数が2から3に増えたことが確認できます。details.Nameフィールドにインデックスを付けることで、名前による検索が高速化されます。

コレクション内のすべてのドキュメントを表示する

find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。

> db.demo323.find();

このクエリを実行すると、以下のような出力が得られます。

{ "_id" : ObjectId("5e51157af8647eb59e56206e"), "details" : { "Name" : "Chris", "Age" : 34 } }
{ "_id" : ObjectId("5e511581f8647eb59e56206f"), "details" : { "Name" : "David", "Age" : 31 } }
{ "_id" : ObjectId("5e511589f8647eb59e562070"), "details" : { "Name" : "Bob", "Age" : 28 } }

インデックスを活用した値の検索

次に、作成したインデックスを活用して、ネストされたフィールドの値を検索するクエリを見てみましょう。以下の例では、details.Nameが「Bob」であるドキュメントを検索します。

> db.demo323.find({"details.Name":"Bob"});

実行結果は以下の通りです。

{ "_id" : ObjectId("5e511589f8647eb59e562070"), "details" : { "Name" : "Bob", "Age" : 28 } }

ドット記法(details.Name)を使用することで、ネストされた内部アイテムの値を簡単に検索できます。インデックスが設定されているため、大規模なコレクションでも効率的にクエリが実行されます。

補足:最新のMongoDBではcreateIndex()を推奨

ensureIndex()は古いバージョンのMongoDBで使用されていたメソッドで、現在は非推奨(deprecated)となっています。最新のMongoDB(3.0以降)では、代わりにcreateIndex()を使用することが推奨されています。使い方はほぼ同じで、以下のように記述します。

> db.demo323.createIndex({"details.Name":1});

インデックスの作成状況は、db.demo323.getIndexes()で確認できます。適切にインデックスを設計することで、MongoDBのクエリパフォーマンスを最大化しましょう。

  1. MongoDBでJSON配列の内部要素にアクセスする方法|ドット記法の使い方を解説

    MongoDBでJSON配列の内部要素にアクセスするには、ドット記法(dot notation)を使用します。本記事では、実際にコレクションを作成し、ネストされた配列内のフィールドを検索する具体的な手順を、サンプルコードと実行結果とともに解説します。 サンプルデータの作成 まず、insert()メソッドを使って、ネストされた構造を持つドキュメントを含むコレクションを作成しましょう。 > db.demo687.insert({CountryName:US, ... info: ... { ... id:101, ... details: ... [ ... { ...   &n

  2. MongoDBで配列をクエリして特定の値を取得する方法

    配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ...    { ...        "details": [ ...            { ...                "