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

MongoDBでネストされたインデックスを作成する方法|createIndex()の使い方を解説

MongoDBでネストされたインデックスを作成するには?

MongoDBでネストされた(入れ子になった)フィールドにインデックスを作成するには、createIndex()メソッドを使用します。旧バージョンで利用されていたensureIndex()は非推奨となっているため、現在ではcreateIndex()を使うのが標準的な方法です。

基本構文

ネストされたフィールドにインデックスを作成する場合の基本構文は以下の通りです。

db.yourCollectionName.createIndex({"yourOuterFieldName.yourInnerFieldName.yourSecondInnerFieldName": 1});

ポイントは、ドット記法(.)を使って、外側のフィールド名から内側のフィールド名へと順番につなげて指定することです。

サンプルデータの作成

構文を理解するために、実際にドキュメントを含むコレクションを作成してみましょう。以下のクエリを実行します。

> db.nestedIndexDemo.insertOne(
    ... {
        ... "CustomerId":101,
        ... "CustomerDetails":
        ... {
            ... "CustomerListDetails":
            ... {
                ... "CustomerName":"Larry",
                ... "CustomerProjectName": "Project-1",
                ... "CustomerCountryName":"US"
            ... }
        ... }
    ... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8fc565d3c9d04998abf010")
}

次に、find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみます。

> db.nestedIndexDemo.find().pretty();

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

{
    "_id" : ObjectId("5c8fc565d3c9d04998abf010"),
    "CustomerId" : 101,
    "CustomerDetails" : {
        "CustomerListDetails" : {
            "CustomerName" : "Larry",
            "CustomerProjectName" : "Project-1",
            "CustomerCountryName" : "US"
        }
    }
}

「CustomerDetails」→「CustomerListDetails」→「CustomerCountryName」というように、3階層にネストされた構造になっていることが確認できます。

ネストされたインデックスの作成

それでは、実際にネストされたフィールドに対してインデックスを作成してみましょう。クエリは以下の通りです。

> db.nestedIndexDemo.createIndex({"CustomerDetails.CustomerListDetails.CustomerCountryName": 1});
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

出力結果の「numIndexesAfter」が2になっていることから、デフォルトの_idインデックスに加えて、新しいインデックスが1つ追加されたことがわかります。

作成したインデックスの確認

作成済みのインデックス一覧を表示するには、getIndexes()メソッドを使用します。

> db.nestedIndexDemo.getIndexes();

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

[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.nestedIndexDemo"
    },
    {
        "v" : 2,
        "key" : {
            "CustomerDetails.CustomerListDetails.CustomerCountryName" : 1
        },
        "name" : "CustomerDetails.CustomerListDetails.CustomerCountryName_1",
        "ns" : "test.nestedIndexDemo"
    }
]

このように、ネストされたフィールドへのパスをドット記法で指定するだけで、どれほど深い階層のフィールドでも簡単にインデックスを作成できます。ネストされたフィールドを対象としたクエリを頻繁に実行する場合は、あらかじめインデックスを作成しておくことで、検索パフォーマンスを大幅に向上させることができます。

  1. Microsoft Wordでインデックス(索引)を作成・更新する方法

    Microsoft Wordで長文のドキュメントを作成する場合、インデックス(索引)は読者にとって非常に便利なツールとなります。通常、索引は書籍の巻末に掲載されており、読者は特定の単語や語句を検索して、そのトピックが記載されているページをすぐに見つけることができます。 Microsoft Wordでも同様に、索引を挿入し、自動的に更新することができます。これにより、手作業の手間を大幅に削減しながら、質の高い参照資料を作成できます。この記事では、Wordでインデックスを作成する方法と、その更新方法について詳しく解説します。 Wordでインデックスを作成する手順 Wordでインデックスを作成する

  2. Pythonでネストされた辞書(入れ子のdict)を作成する方法

    Pythonの辞書(dict)オブジェクトはミュータブル(変更可能)です。この特性を利用すると、ある辞書の「値」として、別の辞書オブジェクトをそのまま格納することができます。このように、キーに対応する値としてさらに辞書が定義されている構造を、ネストされた辞書(入れ子構造の辞書)と呼びます。ネストされた辞書の基本構文ネストされた辞書は、外側のキーに対して、波括弧 {} で囲まれた新しい辞書を値として指定するだけで作成できます。>>> students={"student1":{"name":"Raaj", "