すべてのフィールドにワイルドカード インデックスを作成する
可能性のあるすべてのドキュメント フィールドに対するクエリをサポートするワイルドカード インデックスを作成できます。 ワイルドカード インデックスは、任意のフィールド名または不明なフィールド名に対するクエリをサポートします。
すべてのフィールド( _id
を除く)にワイルドカード インデックスを作成するには、ワイルドカード指定子( $**
)をインデックス キーとして使用します。
db.<collection>.createIndex( { "$**": <sortOrder> } )
このタスクについて
ワイルドカード インデックスは、インデックスを作成するフィールドが不明または変更される可能性がある場合にのみ使用してください。 ワイルドカード インデックスは、特定のフィールドに対象を絞ったインデックスほどパフォーマンスが良くありません。 対象を絞ったインデックスを作成できないような任意のフィールド名がコレクションに含まれている場合は、一貫したフィールド名になるようにスキーマを改造することを検討してください。 対象をたインデックスの詳細については、「クエリをサポートするインデックスの作成 」を参照してください。
始める前に
次のドキュメントを含むartwork
コレクションを作成します。
db.artwork.insertMany( [ { "name": "The Scream", "artist": "Edvard Munch", "style": "modern", "themes": [ "humanity", "horror" ] }, { "name": "Acrobats", "artist": { "name": "Raoul Dufy", "nationality": "French", "yearBorn": 1877 }, "originalTitle": "Les acrobates", "dimensions": [ 65, 49 ] }, { "name": "The Thinker", "type": "sculpture", "materials": [ "bronze" ], "year": 1904 } ] )
各ドキュメントには、アート作品に関する詳細が記載されています。 フィールド名は、部分に関する利用可能な情報に応じて、ドキュメント間で異なります。
手順
次の操作を実行すると、 artwork
コレクション内のすべてのドキュメント フィールド( _id
を除く)にワイルドカード インデックスが作成されます。
db.artwork.createIndex( { "$**" : 1 } )
結果
このインデックスは、コレクション内の任意のフィールドに対する単一フィールド クエリをサポートします。 ドキュメントに埋め込みドキュメントまたは配列が含まれている場合、ワイルドカード インデックスはドキュメントまたは配列をトラバースし、ドキュメントまたは配列内のすべてのフィールドの値を保存します。
たとえば、 インデックスは次のクエリをサポートしています。
クエリ:
db.artwork.find( { "style": "modern" } ) 出力:
[ { _id: ObjectId("6352c401b1fac2ee2e957f09"), name: 'The Scream', artist: 'Edvard Munch', style: 'modern', themes: [ 'humanity', 'horror' ] } ] クエリ:
db.artwork.find( { "artist.nationality": "French" } ) 出力:
[ { _id: ObjectId("6352c525b1fac2ee2e957f0d"), name: 'Acrobats', artist: { name: 'Raoul Dufy', nationality: 'French', yearBorn: 1877 }, originalTitle: 'Les acrobates', dimensions: [ 65, 49 ] } ] クエリ:
db.artwork.find( { "materials": "bronze" } ) 出力:
[ { _id: ObjectId("6352c387b1fac2ee2e957f08"), name: 'The Thinker', type: 'sculpture', materials: [ 'bronze' ], year: 1904 } ]
詳細
カバーする特定のフィールドをプロジェクションするワイルドカード インデックスを作成する方法については、次のページを参照してください。
ワイルドカード インデックスの動作の詳細については、以下を参照してください。