AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

db.コレクション.createIndex()(mongoshメソッド)

MongoDB とドライバー

このページでは、mongosh メソッドのドキュメントについて記載しています。MongoDB ドライバーで同等のメソッドを確認するには、ご使用のプログラミング言語の対応するページを参照してください。
db.collection.createIndex(keys, options, commitQuorum)

コレクションにインデックスを作成します。

このメソッドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

注意

This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

The createIndex() method has the following form:

db.collection.createIndex( <keys>, <options>, <commitQuorum> )

The createIndex() method takes the following parameters:

Parameter
タイプ
説明

keys

ドキュメント

フィールドと値のペアを含むドキュメント。フィールドはインデックス キーで、値はそのフィールドのインデックスのタイプを表します。

フィールドに昇順インデックスを作成する場合、1 の値を指定します。降順インデックスを作成する場合は、-1 の値を指定します。

アスタリスク(*)は有効なインデックス名ではありません。

MongoDB は、次のような多彩なインデックス タイプをサポートしています。

詳細については、「インデックス タイプ」を参照してください。

ワイルドカード インデックスは、ユーザーがカスタム フィールドまたはコレクション内の多種多様なフィールドに対してクエリを実行するワークロードをサポートします。

  • ワイルドカード インデックスは、特定のフィールドとそのサブパス、またはドキュメント内のすべてのフィールドで作成できます。

    詳細については、「ワイルドカード インデックス」を参照してください。

options

ドキュメント

Optional. A document that contains a set of options that controls the creation of the index. See Options for details.

整数または文字列

任意。データを保持する投票レプリカセット ノードの最小数(コミットクォーラム)で、プライマリが indexes を準備完了とマークする前に、インデックス構築の成功を報告する必要があるもの(プライマリを含む)を指します。「投票」ノードとは、members[n].votes が 0 より大きい任意のレプリカセット ノードです。

次の値をサポートします。

  • "votingMembers" - データを保持するすべての投票レプリカセット ノード(デフォルト)。

  • "majority" - データを保持する単純過半数の投票レプリカセット ノード。

  • <int> - データを保持する特定数の投票レプリカセット ノード。

  • レプリカセットのタグ名。

options ドキュメントには、インデックスの作成を制御する一連のオプションが含まれています。異なるインデックス タイプには、そのタイプに固有の追加オプションがある場合があります。

Multiple index options can be specified in the same document. However, if you specify multiple option documents the db.collection.createIndex() operation fails.

Consider the following db.collection.createIndex() operation:

db.collection.createIndex(
{
"a": 1
},
{
unique: true,
sparse: true,
expireAfterSeconds: 3600
}
)

オプションの仕様がこのように複数のドキュメントに分割されていた場合 ({ unique: true }, { sparse: true, expireAfterSeconds: 3600 })、インデックス作成操作は失敗していたでしょう。

以下のオプションは、特に指定がない限り、すべてのインデックス タイプで使用できます。

Parameter
タイプ
説明

unique

ブール値

任意。インデックス キーの値がインデックスの既存値と一致するドキュメントの挿入または更新をコレクションが受け入れないように、ユニークインデックスを作成します。

ユニークインデックスを作成するには、true を指定します。デフォルト値は false です。

このオプションはハッシュされたインデックスには使用できません。

name

string

任意。インデックスの名前。指定しない場合、MongoDB はインデックス フィールドの名前とソート順序を連結してインデックス名を生成します。

partialFilterExpression

ドキュメント

任意。指定すると、インデックスはフィルター式に一致するドキュメントのみを参照します。詳細については、「部分インデックス」を参照してください。

フィルター式には、次の要素を含めることができます。

MongoDB ではすべてのインデックス タイプで partialFilterExpression オプションを指定できます。

sparse

ブール値

任意。true の場合、インデックスは指定されたフィールドを持つドキュメントのみを参照します。これらのインデックスの使用スペースは小さくなりますが、いくつかの状況(特にソート)で異なる動作をします。デフォルト値は false です。詳細については、「スパースインデックス」を参照してください。

次のインデックス タイプはデフォルトでスパースであり、このオプションを無視します。

2dsphere インデックスキーと他のタイプのキーを含む複合インデックスの場合、インデックスがドキュメントを参照するかどうかは 2dsphere インデックスフィールドだけで決まります。

部分インデックスには、sparse index 機能のスーパーセットがあります。アプリケーションに特別な要件がない限り、sparse index ではなく、部分インデックスを使用してください。

expireAfterSeconds

integer

任意。MongoDB がこのコレクション内のドキュメントを保持する期間を制御するための有効期間(TTL)の値を秒単位で指定します。このオプションは TTL インデックスにのみ適用されます。詳細については、「TTL によるコレクションのデータ期限設定」を参照してください。

MongoDB 5.0 より前のバージョンで作成された TTL インデックスを使用する場合、または MongDB 5.0 で作成されたデータを 5.0 より前のインストールと同期する場合は、「NaN を使用して構成されたインデックス」を参照して誤った構成の問題を回避してください。

TTLインデックスの expireAfterSeconds 値は、0 から 2147483647 の範囲内(両端を含む)である必要があります。

ブール値

任意。インデックスがクエリ プランナーから非表示かどうかを決定するブール値。非表示インデックスは、クエリプランの選択において評価されません。

デフォルトは、false に設定されています。

storageEngine

ドキュメント

任意。インデックス作成時に、インデックス単位でストレージエンジンを構成できるようにします。

storageEngine オプションは次のような形式をとります。

storageEngine: { <storage-engine-name>: <options> }

インデックスの作成時に指定されたストレージエンジン構成オプションは、異なるストレージエンジンを使用するノードのあるレプリカセットをサポートするために、レプリケーション中に検証され、oplog に記録されます。

Parameter
タイプ
説明

collation

ドキュメント

任意。インデックスの照合を指定します。

照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。

コレクション レベルで照合を指定した場合、次のようになります。

  • インデックスの作成時に照合を指定しない場合、MongoDB はコレクションのデフォルトの照合でインデックスを作成します。

  • インデックスの作成時に照合を指定する場合、MongoDB は指定された照合でインデックスを作成します。

照合オプションの構文は次のとおりです。

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

照合を指定する場合、locale フィールドは必須ですが、その他の照合フィールドはすべて任意です。フィールドの説明については、照合ドキュメントを参照してください。

次のインデックスは単純なバイナリ比較のみをサポートしており、照合はサポートしていません。

Tip

単純ではない照合順序を持つコレクションに text または 2d インデックスを作成するには、インデックスの作成時、明確に {collation: {locale: "simple"} } を指定する必要があります。

コレクション レベルで照合を指定した場合、次のようになります。

  • インデックスの作成時に照合を指定しない場合、MongoDB はコレクションのデフォルトの照合でインデックスを作成します。

  • インデックスの作成時に照合を指定する場合、MongoDB は指定された照合でインデックスを作成します。

Tip

照合の strength を1 または 2 に指定すると、大文字と小文字を区別しないインデックスを作成できます。照合の strength が 1 のインデックスは、発音と大文字・小文字の両方を区別しません。

同じキーに対して、異なる照合を持つ複数のインデックスを作成できます。同じキー パターンで照合が異なるインデックスを作成するには、ユニークインデックス名を設定する必要があります。

string の比較にインデックスを使用するには、操作で同じ照合も指定する必要があります。操作でインデックスと異なる照合が指定されている場合、インデックスはインデックス フィールドで string の比較をサポートできません。

警告

照合対応のインデックスキーは、照合のないインデックスのインデックスキーよりも大きくなる可能性があります。これは、照合付きで構成されたインデックスが ICU 照合キーを使用して並べ替え順序を実現するためです。

次のオプションはテキストインデックスのみに使用できます。

Parameter
タイプ
説明

weights

ドキュメント

任意。テキスト インデックスの場合、フィールドと重みを含むドキュメントが組み合わされます。重みは 1 から 99 の範囲の整数で、999 スコアに関して他のインデックス フィールドと比較したフィールドの重要度を示します。重みはインデックス フィールドの一部またはすべてに指定できます。スコアを調整するには、「自己管理型配置の $text 結果の重みの割り当て」を参照してください。デフォルト値は 1 です。

MongoDB 5.0 以降、重みオプションはテキスト インデックスにのみ使用できます。

default_language

string

任意.テキスト インデックスで、ストップワードのリストと ステマーとトークナイザのルールを決定する言語。「自己管理型配置の $text クエリ言語」を、詳細と例については「自己管理型MongoDBのテキストインデックスの言語の指定」を参照してください。デフォルト値は english です。

language_override

string

任意。テキスト インデックスの場合、ドキュメントの上書き言語を含む、コレクション内のドキュメントのフィールドの名前です。デフォルト値は language です。例については、自己管理型MongoDBのテキストインデックスの言語の指定を参照してください。

textIndexVersion

integer

任意。text インデックスのバージョン番号。ユーザーはこのオプションを使用してデフォルトのバージョン番号を上書きできます。

使用可能なバージョンについては、「自己管理型配置のテキストインデックス バージョン 」を参照してください。

次のオプションは 2dsphere インデックスのみに使用できます。

Parameter
タイプ
説明

2dsphereIndexVersion

integer

任意。2dsphere インデックスのバージョン番号。ユーザーはこのオプションを使用してデフォルトのバージョン番号を上書きできます。

使用可能なバージョンについては、「2dsphere インデックス」を参照してください。

次のオプションは 2d インデックスに対してのみ使用できます。

Parameter
タイプ
説明

bits

integer

任意。2d インデックスで、ロケーション データの保存されたジオハッシュ値の精度数。

bits 値の範囲は 1 から 32 まで(32 を含む)です。デフォルト値は 26 です。

min

数値

任意。2d インデックスで、経度と緯度の境界(下限を含む)。デフォルト値は -180.0 です。

max

数値

任意。2d インデックスで、経度と緯度の値の境界(上限を含む)デフォルト値は 180.0 です。

ワイルドカード インデックスは wildcardProjection オプションを使用できます。

Parameter
タイプ
説明

wildcardProjection

ドキュメント

任意。特定のフィールドパスを ワイルドカード インデックス に含めたり除外したりできるようにします。

このオプションは、すべてのドキュメント フィールドにワイルドカード インデックスを作成する場合にのみ有効です。特定のフィールドパスとそのサブフィールドにワイルドカード インデックスを作成する場合には、wildcardProjection オプションは指定できません。

wildcardProjection 次のような仕様で動作します。

{ "$**": 1 }
{ "userID":, "$**": 1 }

ただし、ワイルドカード フィールドと通常の(ワイルドカード以外の)フィールドに同じフィールドを含むインデックスを定義することはできません。 インデックスを正しく定義するには、wildcardProjection を使用して重複するフィールドをワイルドカード パターンから除外します。

wildcardProjection は次のような仕様では動作しません。

{ "path.to.field.$**": 1 }

wildcardProjection オプションは次のような形式をとります。

wildcardProjection: {
"path.to.field.a": <value>,
"path.to.field.b": <value>
}

<value> は次のいずれかになります。

  • 1 または true の場合は、ワイルドカード インデックスにフィールドが追加されます。

  • 0 または false の場合は、ワイルドカード インデックスからフィールドが除外されます。

詳しくは以下を参照してください。

If you call db.collection.createIndex() for an index that already exists, MongoDB does not recreate the index.

With the exception of the collation option, if you create an index with one set of index options and then try to recreate the same index but with different index options, MongoDB will not change the options nor recreate the index.

The hidden option can be changed without dropping and recreating the index. See Hidden Option.

To change the other index options, drop the existing index with db.collection.dropIndex() before running db.collection.createIndex() with the new options.

同じキーに対して、異なる照合を持つ複数のインデックスを作成できます。同じキー パターンで照合が異なるインデックスを作成するには、ユニークインデックス名を設定する必要があります。

To hide or unhide existing indexes, you can use the following mongosh methods:

たとえば、

  • インデックスの hidden オプションを true に変更するには、db.collection.hideIndex() メソッドを使用します。

    db.movies.hideIndex( { title: 1 } )
  • インデックスの hidden オプションを false に変更するには、db.collection.unhideIndex() メソッドを使用します。

    db.movies.unhideIndex( { title: 1 } )

トランザクションがクロスシャード間書き込みトランザクション(write transaction)でない場合に、分散トランザクション内にコレクションとインデックスを作成できます。

To use db.collection.createIndex() in a transaction, the transaction must use read concern "local". If you specify a read concern level other than "local", the transaction fails.

バージョン7.1で変更。

MongoDB 7.1 以降では、インデックス構築でのエラー報告が高速化され、障害回復力が高まります。 新しいindexBuildMinAvailableDiskSpaceMBパラメータを使用して、インデックスビルドに必要な最小ディスク容量を設定することもできます。これにより、ディスク容量が低すぎる場合はインデックスビルドが停止します。

次の表は、MongoDB 7.1 以降と以前のバージョンのインデックス構築動作を比較したものです。

MongoDB 7.1 以降の 動作
以前の MongoDB バージョンでの動作

重複キー エラーを除く、コレクションスキャンフェーズ中に見つかったインデックス エラーは直ちに返され、その後インデックスのビルドは停止します。 以前の MongoDB バージョンでは、インデックスビルドの終了間際に発生するコミットフェーズでエラーが返されます。 MongoDB 7.1 は、インデックス エラーを迅速に診断するのに役立ちます。 たとえば、互換性のないインデックス値の形式が見つかった場合は、すぐにエラーが返されます。

MongoDB 7.1 と比較して、インデックス構築エラーが返されるまでに長い時間がかかる可能性があります。このエラーはコミットフェーズのインデックス構築の終了間して返されるためです。

配置の回復力を強化。 インデックスビルドエラーが発生した場合、セカンダリノードはプライマリメンバーにインデックスビルドの停止をリクエストでき、セカンダリノードはクラッシュしません。 インデックスビルドを停止するリクエストは常に可能ではありません。ノードがすでにインデックスをコミットするために投票している場合、セカンダリはインデックスビルドの停止をリクエストできず、セカンダリはクラッシュします(MongoDB 7.0 以前と同様)。

インデックス構築エラーにより、セカンダリ ノードがクラッシュする可能性があります。

インデックス ビルドのためのディスク領域の管理を改善しました。 使用可能なディスク容量がindexBuildMinAvailableDiskSpaceMBパラメータで指定された最小値を下回ると、インデックスビルドが自動的に停止されることがあります。 ノードがすでにインデックスをコミットするために投票している場合、インデックスのビルドは停止されません。

使用可能なディスク容量が不足しても、インデックスの構築は停止しません。

注意

FeatureCompatibilityVersion 4.4 以上が必要です。

レプリカセット全体でインデックス構築を同時に開始するには、レプリカセットまたはシャーディングされたクラスター内の各 mongod は、featureCompatibilityVersion を少なくとも 4.4 に設定する必要があります。

レプリカセットまたはシャーディングされたクラスター上のインデックスは、データを保持するすべてのレプリカセット ノードで同時に構築されます。シャーディングされたクラスターの場合、インデックス構築は、インデックスが作成されるコレクションのデータを含むシャードでのみ行われます。プライマリは、インデックスを使用可能とマークする前に、自身を含む最小限のデータを保持する voting ノード(コミットクォーラム)でインデックス構築を完了する必要があります。詳細については、「レプリケートされた環境でのインデックス構築」を参照してください。

To set the commit quorum, use createIndex() to specify the commitQuorum value.

commitQuorum は、データを保持する投票ノードの数、またはプライマリがコミットを実行する前にプライマリを含めてどの投票ノードがインデックス構築のコミット準備をしておく必要があるかを指定します。コミットクォーラムのデフォルトである votingMembers は、データを保持するすべてのノードを指します。

このページの例では、sample_mflix データセット のデータを使用しています。自己管理型 MongoDB 配置にこのデータセットをロードする方法の詳細については、「サンプル データセットのロード」を参照してください。サンプル データベースに何らかの変更を加えた場合は、今ページの例を実行するには、データベースを削除して再作成する必要がある可能性があります。

注意

moviesコレクション内のdocumentには、ここに表示されていない追加フィールドが含まれています。

次の例では、フィールド title に昇順のインデックスを作成しています。

db.movies.createIndex( { title: 1 } )

If the keys document specifies more than one field, then createIndex() creates a compound index.

次の例では、year、runtime、title フィールドに複合インデックスを作成しています。

db.movies.createIndex( { year: 1, runtime: 1, title: 1 } )

次の例では、title フィールド(昇順)と runtime フィールド(ハッシュ)に複合インデックスを作成します。

db.movies.createIndex( { title: 1, runtime: "hashed" } )

ハッシュインデックスの詳細については、ハッシュインデックスを参照してください。

次のコードを使用して、sample_mflixデータベースの moviesコレクションに、string 比較用の照合ロケール"fr" を持つインデックスを作成します。

db.movies.createIndex( { title: 1 }, { collation: { locale: "fr" } } )

インデックスと同じ照合を指定する次のクエリでは、インデックスを使用できます。

db.movies.find(
{ title: "Les Misèrables" },
{ title: 1, year: 1 }
).collation( { locale: "fr" } )

ただし、デフォルトで「シンプル」な binary コレータを使用する次の クエリ操作、インデックスを使用できず、COLLSCAN が必要です。

db.movies.find( { title: "Les Misèrables" }, { title: 1 , year: 1 } )

インデックス プレフィックスキーが文字列、配列、および埋め込みドキュメントではない複合インデックスの場合でも、異なる照合を指定する操作では、インデックスを使用してインデックス プレフィックスキーの比較をサポートできます。

例、次のコードを使用して、sample_mflixデータベースの moviesコレクションに数値フィールド year と metacritic と stringフィールドtitle を指定する複合インデックスを作成できます。このインデックスでは、string 比較用の照合ロケール"fr" も指定します。

db.movies.createIndex(
{ year: 1, metacritic: 1, title: 1 },
{ collation: { locale: "fr" } }
)

文字列の比較に "simple" バイナリ照合を使用する次の操作では、インデックスを使用できます。

db.movies.find(
{ year: 2012 },
{ title: 1, year: 1, metacritic: 1 }
).sort( { title: 1 } )
db.movies.find(
{ year: 2012, metacritic: { $gt: Decimal128( "50" ) } },
{ title: 1, year: 1, metacritic: 1 }
).sort( { title: 1 } )

次の操作では、"simple" バイナリ照合を使用してインデックス付きの title フィールドで文字列を比較しますが、クエリの year: 2012 部分の実行についてはインデックスが使用できます。

db.movies.find( { year: 2012, title: "Les Misèrables" }, { year: 1, title: 1 } )

インデックスでインデックス が使用されているかどうかを確認するには、 explain() オプションを指定してクエリを実行します。

重要

ドキュメントキーとの照合(埋め込みドキュメントのキーを含む)では、単純なバイナリ比較が使用されます。つまり、"type.cafe" のようなキーのクエリは、キー "type.cafe" と一致しません。strength パラメータに設定した値に関係なく、キー "foo.bar" と一致しません。

次の操作を実行すると、awards フィールドでワイルドカード インデックスが作成されます。

db.movies.createIndex( { "awards.$**": 1 } )

このワイルドカードを使用すると、 MongoDB はawards のすべてのスカラー値をインデックス化します。フィールドがネストされたdocumentまたは配列の場合、ワイルドカードはdocumentまたは配列に再帰し、documentまたは配列内のすべてのスカラー フィールドにインデックスを作成します。

ワイルドカード インデックスは、awards またはそのネストされたフィールドに対する任意の単一フィールド クエリをサポート可能です。

db.movies.find( { "awards.wins": { $gt: 1 } }, { title: 1 } )
db.movies.find( { "awards.nominations": { $gt: 5 } }, { title: 1 } )

次の操作を実行すると、すべてのスカラー フィールド(_id フィールドを除く)にワイルドカード インデックスが作成されます。

db.movies.createIndex( { "$**": 1 } )

このワイルドカード を使用すると、 MongoDB はコレクション内の核documentのすべてのスカラー フィールドにインデックスを作成します。特定のフィールドがネストされたdocumentまたは配列の場合、ワイルドカードはdocumentまたは配列に再帰し、documentまたは配列内のすべてのスカラー フィールドにインデックスを作成します。

作成されたインデックスは、コレクションのドキュメント内の任意のフィールドに対するクエリをサポートできます。

db.movies.find( { runtime: { $gt: 300 } }, { title: 1 } )
db.movies.find( { "awards.nominations": { $gt: 5 } }, { title: 1 } )

次の操作ではワイルドカード インデックスを作成し、wildcardProjection オプションを使用して tomatoes.viewer および tomatoes.critic フィールドのスカラー値のみをインデックスに含めます。

db.movies.createIndex(
{ "$**": 1 },
{
"wildcardProjection": {
"tomatoes.viewer": 1,
"tomatoes.critic": 1
}
}
)

The pattern "$**" includes all fields in the document. Use the wildcardProjection field to limit the index to fields you specify. For complete documentation on wildcardProjection, see Options for wildcard indexes.

フィールドがネストされたドキュメントまたは配列の場合、ワイルドカード インデックスはそのフィールドを再帰処理して、ドキュメントまたは配列内のすべてのスカラー フィールドにインデックスを作成します。

ワイルドカード インデックスは、wildcardProjection に含まれる任意のスカラーフィールドに対するクエリをサポートします。

db.movies.find( { "tomatoes.viewer.rating": { $gt: 4 } }, { title: 1 } )

注意

ワイルドカード インデックスは、_id フィールドを明示的に含める場合を除き、wildcardProjection ドキュメントに包含・除外ステートメントを混在させることはできません。wildcardProjection の詳細については、パラメーターのドキュメントを参照してください。

この例では、ワイルドカード インデックスと wildcardProjection ドキュメントを使用して、コレクション内の各ドキュメントのスカラー フィールドにインデックスを作成します。

ワイルドカード インデックスでは、tomatoes.viewer フィールドと tomatoes.critic フィールドは除外されます。

db.movies.createIndex(
{ "$**": 1 },
{
"wildcardProjection": {
"tomatoes.viewer": 0,
"tomatoes.critic": 0
}
}
)

ワイルドカード パターン "$**" にはドキュメント内のすべてのフィールドが含まれます。ただし、wildcardProjection フィールドは指定されたフィールドをインデックスから除外します。

For complete documentation on wildcardProjection, see Options for wildcard indexes.

フィールドがネストされたdocumentまたは配列の場合、ワイルドカードインデックスはdocumentまたは配列に再帰し、documentまたは配列内のすべてのスカラー フィールドにインデックスを作成します。

インデックスは、wildcardProjection によって除外されるものを除くすべてのスカラー フィールドに対するクエリをサポートできます。

db.movies.find( { "tomatoes.viewer.rating": { $gt: 3 } }, { title: 1 } )

注意

ワイルドカード インデックスは、_id フィールドを明示的に含める場合を除き、wildcardProjection ドキュメントに包含・除外ステートメントを混在させることはできません。wildcardProjection の詳細については、パラメーターのドキュメントを参照してください。

The following operation creates an index with a commit quorum of "majority", or a simple majority of data-bearing voting members:

db.movies.createIndex(
{ "title": 1 },
{ },
"majority"
)

プライマリがインデックス構築を準備完了とマークするには、データを保持する単純過半数の投票ノードがインデックス構築をコミットするために「投票」済みである必要があります。インデックス構築と投票プロセスの詳細については、「レプリケートされた環境でのインデックス構築」を参照してください。

このページを評価