MongoDB とドライバー
定義
パラメーター
db.collection.createIndexes() は以下のパラメーターを取ります。
Parameter | タイプ | 説明 |
|---|---|---|
| ドキュメント | インデックス仕様ドキュメントを含む配列。各ドキュメントには、フィールドと値のペアが含まれています。フィールドはインデックスキーで、値はそのフィールドのインデックスのタイプを表します。フィールドの昇順インデックスの場合は |
| ドキュメント | Optional. A document that contains a set of options that controls the creation of the indexes. See Options for details. |
整数または文字列 | 任意。データを保持する投票レプリカセット ノードの最小数(コミットクォーラム)で、プライマリが 次の値をサポートします。
|
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas はクラウドでの MongoDB 配置のための完全管理サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
Stable API
Stable API V1 を使用する場合
optionsドキュメントでは次のフィールドは指定できません。backgroundbucketSizesparsestorageEngine
テキスト インデックスは作成できません。
上記でサポートされていないインデックス タイプは、 厳密モード の クエリ プランナー によって無視されます。たとえば、
cursor.hint()でsparseインデックスを使用しようとすると、次のBadValueエラーが発生します。planner returned error :: caused by :: hint provided does not correspond to an existing index
オプション
options ドキュメントには、インデックスの作成を制御する一連のオプションが含まれています。異なるインデックス タイプには、そのタイプに固有の追加オプションがある場合があります。
Multiple index options can be specified in the same document. However, if you specify multiple option documents the db.collection.createIndexes() operation fails.
重要
When you specify options to db.collection.createIndexes(), the options apply to all of the specified indexes. For example, if you specify a collation option, all of the created indexes will include that collation.
db.collection.createIndexes() は、互換性のないオプションや多すぎる引数でインデックスを作成しようとするとエラーを返します。詳しくは、オプションの説明を参照してください。
すべてのインデックス タイプのオプション
以下のオプションは、特に指定がない限り、すべてのインデックス タイプで使用できます。
Parameter | タイプ | 説明 | |
|---|---|---|---|
| ブール値 | 任意。 ユニークインデックスを作成するには、 このオプションはハッシュされたインデックスには使用できません。 | |
| string | 任意。インデックスの名前。指定しない場合、MongoDB はインデックス フィールドの名前とソート順序を連結してインデックス名を生成します。 Options specified to | |
| ドキュメント | 任意。指定すると、インデックスはフィルター式に一致するドキュメントのみを参照します。詳細については、「部分インデックス」を参照してください。 フィルター式には、次の要素を含めることができます。
MongoDB ではすべてのインデックス タイプで | |
| ブール値 | 任意。 次のインデックス タイプはデフォルトでスパースであり、このオプションを無視します。
部分インデックスには、sparse index 機能のスーパーセットがあります。アプリケーションに特別な要件がない限り、sparse index ではなく、部分インデックスを使用してください。 | |
| integer | 任意。MongoDB がこのコレクション内のドキュメントを保持する期間を制御するための有効期間(TTL)の値を秒単位で指定します。このオプションは TTL インデックスにのみ適用されます。詳細については、「TTL によるコレクションのデータ期限設定」を参照してください。 MongoDB 5.0 より前のバージョンで作成された TTL インデックスを使用する場合、または MongDB 5.0 で作成されたデータを 5.0 より前のインストールと同期する場合は、「NaN を使用して構成されたインデックス」を参照して誤った構成の問題を回避してください。 TTLインデックスの | |
ブール値 | 任意。インデックスがクエリ プランナーから非表示かどうかを決定するブール値。非表示インデックスは、クエリプランの選択において評価されません。 デフォルトは、 | ||
| ドキュメント | 任意。作成されたインデックスのストレージ エンジンをユーザーが設定できるようにします。
インデックスの作成時に指定されたストレージエンジン構成オプションは、異なるストレージエンジンを使用するノードのあるレプリカセットをサポートするために、レプリケーション中に検証され、oplog に記録されます。 |
照合のオプション
Parameter | タイプ | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ドキュメント | 任意。インデックスの照合を指定します。 照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。 コレクション レベルで照合を指定した場合、次のようになります。
照合オプションの構文は次のとおりです。 照合を指定する場合、 |
次のインデックスは単純なバイナリ比較のみをサポートしており、照合はサポートしていません。
Tip
単純ではない照合順序を持つコレクションに text または 2d インデックスを作成するには、インデックスの作成時、明確に {collation: {locale: "simple"} } を指定する必要があります。
照合とインデックスの使用
コレクション レベルで照合を指定した場合、次のようになります。
インデックスの作成時に照合を指定しない場合、MongoDB はコレクションのデフォルトの照合でインデックスを作成します。
インデックスの作成時に照合を指定する場合、MongoDB は指定された照合でインデックスを作成します。
Tip
照合の strength を1 または 2 に指定すると、大文字と小文字を区別しないインデックスを作成できます。照合の strength が 1 のインデックスは、発音と大文字・小文字の両方を区別しません。
同じキーに対して、異なる照合を持つ複数のインデックスを作成できます。同じキー パターンで照合が異なるインデックスを作成するには、ユニークインデックス名を設定する必要があります。
文字列の比較にインデックスを使用するには、操作で同じ照合も指定する必要があります。つまり、照合順序を持つインデックスでは、操作で異なる照合順序が指定されている場合、インデックス付きフィールドで文字列比較を実行する操作をサポートできません。
警告
照合対応のインデックスキーは、照合のないインデックスのインデックスキーよりも大きくなる可能性があります。これは、照合付きで構成されたインデックスが ICU 照合キーを使用して並べ替え順序を実現するためです。
text インデックスのオプション
次のオプションはテキストインデックスのみに使用できます。
Parameter | タイプ | 説明 |
|---|---|---|
| ドキュメント | 任意。テキスト インデックスの場合、フィールドと重みを含むドキュメントが組み合わされます。重みは 1 から 99,999 までの整数で、スコアに関して他のインデックス フィールドと比較したフィールドの重要度を示します。重みはインデックス フィールドの一部またはすべてに指定できます。スコアを調整するには、「テキスト検索結果への重みのの割り当て」を参照してください。デフォルト値は MongoDB 5.0 以降、重みオプションはテキスト インデックスにのみ使用できます。 |
| string | 任意。テキスト インデックスで、ストップワードのリストと ステマーとトークナイザのルールを決定する言語。利用可能な言語については自己管理型配置のテキスト検索言語を、詳細と例については自己管理型MongoDBのテキストインデックスの言語の指定を参照してください。デフォルト値は |
| string | 任意。テキスト インデックスの場合、ドキュメントの上書き言語を含む、コレクション内のドキュメントのフィールドの名前です。デフォルト値は |
| integer | 任意。 使用可能なバージョンについては、「自己管理型配置のテキストインデックス バージョン 」を参照してください。 |
2dsphere インデックスのオプション
次のオプションは 2dsphere インデックスのみに使用できます。
Parameter | タイプ | 説明 |
|---|---|---|
| integer | 任意。 使用可能なバージョンについては、「2dsphere インデックス」を参照してください。 |
2d インデックスのオプション
次のオプションは、2d インデックスに対してのみ使用できます。
Parameter | タイプ | 説明 |
|---|---|---|
| integer | 任意。
|
| 数値 | 任意。 |
| 数値 | 任意。 |
インデックスのオプションwildcard
次のオプションはワイルドカード インデックスでのみ使用できます。
Parameter | タイプ | 説明 | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ドキュメント | 任意。特定のフィールドパスを ワイルドカード インデックス に含めたり除外したりできるようにします。 このオプションは、すべてのドキュメント フィールドにワイルドカード インデックスを作成する場合にのみ有効です。特定のフィールド パスとそのサブフィールドにワイルドカード インデックスを作成する場合には、
ただし、ワイルドカード フィールドと通常の(ワイルドカード以外の)フィールドに同じフィールドを含むインデックスを定義することはできません。 インデックスを正しく定義するには、
ワイルドカード インデックスでは、デフォルトで
Options specified to |
詳しくは以下を参照してください。
動作
既存インデックスの再作成
If you call db.collection.createIndexes() for an index or indexes that already exist, MongoDB does not recreate the existing index or indexes.
インデックス オプション
照合非対応および非表示オプション
照合オプションは除き、1 つのインデックスオプションセットを使用してインデックスを作成し、その後別のインデックスオプションを使用して同じインデックスを再作成しようとすると、MongoDB はオプションを変更せず、インデックスを再作成しません。
非表示オプションはインデックスを削除して再度作成することなく変更できます。詳細は、「非表示オプション」を参照してください。
To change the other index options, drop the existing index with db.collection.dropIndex() before running db.collection.createIndexes() with the new options.
照合オプション
同じキーに対して、異なる照合を持つ複数のインデックスを作成できます。同じキー パターンで照合が異なるインデックスを作成するには、ユニークインデックス名を設定する必要があります。
非表示オプション
To hide or unhide existing indexes, you can use the following mongosh methods:
トランザクション
トランザクションがクロスシャード間書き込みトランザクション(write transaction)でない場合に、分散トランザクション内にコレクションとインデックスを作成できます。
To use db.collection.createIndexes() in a transaction, the transaction must use read concern "local". If you specify a read concern level other than "local", the transaction fails.
コミットクォーラム
注意
FeatureCompatibilityVersion 4.4 以上が必要です。
レプリカセット全体でインデックス構築を同時に開始するには、レプリカセットまたはシャーディングされたクラスター内の各 mongod は、featureCompatibilityVersion を少なくとも 4.4 に設定する必要があります。
レプリカセットまたはシャーディングされたクラスター上のインデックスは、データを保持するすべてのレプリカセット ノードで同時に構築されます。シャーディングされたクラスターの場合、インデックス構築は、インデックスが作成されるコレクションのデータを含むシャードでのみ行われます。プライマリは、インデックスを使用可能とマークする前に、自身を含む最小限のデータを保持する voting ノード(コミットクォーラム)でインデックス構築を完了する必要があります。詳細については、「レプリケートされた環境でのインデックス構築」を参照してください。
To set the commit quorum, use createIndexes() to specify the commitQuorum value.
commitQuorum は、データを保持する投票ノードの数、またはプライマリがコミットを実行する前にプライマリを含めてどの投票ノードがインデックス構築のコミット準備をしておく必要があるかを指定します。コミットクォーラムのデフォルトである votingMembers は、データを保持するすべてのノードを指します。
例
Tip
db.collection.createIndex() に、さまざまなインデックス仕様の例があります。
オプションなしのインデックスの作成
次のようなドキュメントを含む restaurants コレクションを考えてみましょう。
db.restaurants.insertOne ( { location: { type: "Point", coordinates: [-73.856077, 40.848447] }, name: "Morris Park Bake Shop", cuisine: "Cafe", borough: "Bronx", } )
次の例では、restaurants コレクションに 2 つのインデックスを作成します。 1 つは borough フィールドの昇順インデックスで、もう 1 つは location フィールドの 2dsphere インデックスです。
db.restaurants.createIndexes([{"borough": 1}, {"location": "2dsphere"}])
照合が指定されたインデックスの作成
次の例では、products コレクションに 2 つのインデックスを作成します。1 つは manufacturer フィールドの昇順インデックスで、もう 1 つは category フィールドの昇順インデックスです。どちらのインデックスも、ロケール fr と比較強度 2 を指定する照合を使用します。
db.products.createIndexes( [ { "manufacturer": 1}, { "category": 1 } ], { collation: { locale: "fr", strength: 2 } })
同じ照合ルールを使用するインデックス付きキーに対するクエリまたはソート操作では、MongoDB はインデックスを使用できます。詳細については、「照合とインデックスの使用」を参照してください。
ワイルドカード インデックスの作成
ワイルドカード インデックスの詳細については、「ワイルドカード インデックス」を参照してください。
次に、ワイルドカード インデックスの作成例を示します。
単一フィールドパスでのワイルドカード インデックスの作成
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Jeans", product_attributes: { price: { cost: 29.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Sweater", product_attributes: { washable: true, size: [ "small", "medium", "large" ] } } ] )
次の操作を実行すると、product_attributes フィールドでワイルドカード インデックスが作成されます。
use inventory db.products_catalog.createIndexes( [ { "product_attributes.$**" : 1 } ] )
このワイルドカード インデックスを使用すると、MongoDB はproduct_attributes のすべてのスカラー値をインデックス化します。フィールドがネストされたドキュメントまたは配列の場合、ワイルドカード インデックスはドキュメントまたは配列に再帰し、ドキュメントまたは配列内のすべてのスカラー フィールドにインデックスを作成します。
ワイルドカード インデックスは、product_attributes またはそのネストされたフィールドに対する任意の単一フィールド クエリをサポート可能です。
db.products_catalog.find( { "product_attributes.washable" : true } ) db.products_catalog.find( { "product_attributes.maxSize" : { $gt : 20 } } ) db.products_catalog.find( { "product_attributes.colors" : { $eq: "blue" } } )
注意
パス固有のワイルドカード インデックス構文はwildcardProjectionオプションと互換性がありません。 詳細については、パラメーターのドキュメントを参照してください。
すべてのフィールドパスでのワイルドカード インデックスの作成
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Jeans", product_attributes: { price: { cost: 29.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Sweater", product_attributes: { washable: true, size: [ "small", "medium", "large" ] } } ] )
次の操作を実行すると、すべてのスカラー フィールド(_id フィールドを除く)にワイルドカード インデックスが作成されます。
use inventory db.products_catalog.createIndexes( [ { "$**" : 1 } ] )
このワイルドカード インデックスを使用すると、MongoDB はコレクション内の各ドキュメントのすべてのスカラー フィールドにインデックスを作成します。特定のフィールドがネストされたドキュメントまたは配列の場合、ワイルドカード インデックスはドキュメントまたは配列に再帰し、ドキュメントまたは配列内のすべてのスカラー フィールドにインデックスを作成します。
作成されたインデックスは、コレクションのドキュメント内の任意のフィールドに対するクエリをサポートできます。
db.products_catalog.find( { "product_price" : { $lt : 25 } } ) db.products_catalog.find( { "product_attributes.colors" : { $eq: "blue" } } )
注意
ワイルドカード インデックスでは、デフォルトで _id フィールドが省略されます。_id フィールドをワイルドカード インデックスに含めるには、wildcardProjection ドキュメントに明示的に含める必要があります。詳細については、パラメーターのドキュメントを参照してください。
複数の特定フィールドパスに対するワイルドカード インデックスの作成
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Jeans", product_attributes: { price: { cost: 29.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Sweater", product_attributes: { washable: true, size: [ "small", "medium", "large" ] } } ] )
次の操作ではワイルドカード インデックスを作成し、wildcardProjection オプションを使用して product_attributes.colors および product_attributes.material フィールドのスカラー値のみをインデックスに含めます。
use inventory db.products_catalog.createIndexes( [ { "$**" : 1 } ], { "wildcardProjection" : { "product_attributes.colors" : 1, "product_attributes.material" : 1 } } )
パターン "$**" にはドキュメント内のすべてのフィールドが含まれます。指定されたフィールドにインデックスを制限するには、wildcardProjection フィールドを使用します。
wildcardProjection の完全なドキュメントについては、「wildcard インデックスのオプション」を参照してください。
フィールドがネストされたドキュメントまたは配列の場合、ワイルドカード インデックスはドキュメントまたは配列に再帰し、ドキュメントまたは配列内のすべてのスカラー フィールドにインデックスを作成します。
ワイルドカード インデックスは、wildcardProjection に含まれる任意のスカラーフィールドに対するクエリをサポートします。
db.products_catalog.find( { "product_attributes.colors" : { $eq: "Blue" } } ) db.products_catalog.find( { "product_attributes.material" : "Cotton" } )
注意
ワイルドカード インデックスは、_id フィールドを明示的に含める場合を除き、wildcardProjection ドキュメントに包含・除外ステートメントを混在させることはできません。wildcardProjection の詳細については、パラメーターのドキュメントを参照してください。
ワイルドカード インデックス カバレッジからの特定フィールドの除外
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Jeans", product_attributes: { price: { cost: 29.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Sweater", product_attributes: { washable: true, size: [ "small", "medium", "large" ] } } ] )
この例では、ワイルドカード インデックスと wildcardProjection ドキュメントを使用して、コレクション内の各ドキュメントのスカラー フィールドにインデックスを作成します。ワイルドカード インデックスでは、product_attributes.colors フィールドと product_attributes.material フィールドは除外されます。
use inventory db.products_catalog.createIndexes( [ { "$**" : 1 } ], { "wildcardProjection" : { "product_attributes.colors" : 0, "product_attributes.material" : 0 } } )
ワイルドカード パターン "$**" にはドキュメント内のすべてのフィールドが含まれます。ただし、wildcardProjection フィールドは指定されたフィールドをインデックスから除外します。
wildcardProjection の完全なドキュメントについては、「wildcard インデックスのオプション」を参照してください。
フィールドがネストされたドキュメントまたは配列の場合、ワイルドカード インデックスはドキュメントまたは配列に再帰し、ドキュメントまたは配列内のすべてのスカラー フィールドにインデックスを作成します。
インデックスは、wildcardProjection で除外されたフィールドを除く任意のスカラー フィールドに対するクエリをサポートできます。
db.products_catalog.find( { "product_attributes.maxSize" : { $gt: 25 } } ) db.products_catalog.find( { "product_attributes.washable" : true } )
注意
ワイルドカード インデックスは、_id フィールドを明示的に含める場合を除き、wildcardProjection ドキュメントに包含・除外ステートメントを混在させることはできません。wildcardProjection の詳細については、パラメーターのドキュメントを参照してください。
コミットクォーラムを使用したインデックスの作成
The following operation creates an index with a commit quorum of "majority":
db.getSiblingDB("examples").invoices.createIndexes( { "invoices" : 1 }, { }, "majority" )
プライマリがインデックス構築を準備完了とマークするには、データを保持する単純過半数の投票ノードがインデックス構築をコミットするために「投票」済みである必要があります。インデックス構築と投票プロセスの詳細については、「レプリケートされた環境でのインデックス構築」を参照してください。
複数のインデックスの作成
カリフォルニア州(CA)とワシントン州(WA)のケーキ販売を含む cakeSales コレクションを作成します。
db.cakeSales.insertMany( [ { _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"), state: "CA", price: 13, quantity: 120 }, { _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"), state: "WA", price: 14, quantity: 140 }, { _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"), state: "CA", price: 12, quantity: 145 }, { _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"), state: "WA", price: 13, quantity: 104 }, { _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"), state: "CA", price: 41, quantity: 162 }, { _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"), state: "WA", price: 43, quantity: 134 } ] )
次の例では、cakeSales コレクションに複数のインデックスを作成します。
db.cakeSales.createIndexes( [ { "type": 1 }, { "orderDate": 1 }, { "state": 1 }, { "orderDate": 1, "state": -1 } ] )
最初の 3 つのインデックスは単一のフィールドにあり、昇順(1)です。
最後のインデックスは、orderDate では昇順(1)で、state では降順(-1)です。
詳細情報
インデックスに関する追加情報については、以下を参照してください。
MongoDB のインデックスとインデックス作成の詳細については、このマニュアルの インデックス セクションを参照してください。
db.collection.getIndexes()ではコレクションの既存インデックスの仕様を参照できます。textインデックスの作成の詳細については、「 自己管理型配置のテキスト インデックス 」を参照してください。地理空間クエリ用の 地理空間インデックス。
データの有効期限を示す TTL インデックス。