ワイルドカード インデックスの制限
互換性のないインデックスのタイプまたはプロパティ
ワイルドカード インデックスは、次のインデックス タイプまたはプロパティをサポートしていません。
注意
ワイルドカード インデックスは、ワイルドカード テキスト インデックスとは区別され、互換性もありません。 ワイルドカード インデックスは $text
演算子を使用するクエリをサポートしていません。
サポートされていないクエリと集計パターン
- フィールドが存在しない
ワイルドカード インデックスはスパースで、空のフィールドにはインデックスを作成しません。 したがって、ワイルドカード インデックスはフィールドがないドキュメントをサポートできません。
たとえば、コレクション
inventory
とワイルドカード インデックスがproduct_attributes
にあるコレクションを考えてみましょう。 ワイルドカード インデックスは次のクエリをサポートしていません。db.inventory.find( {"product_attributes" : { $exists : false } } ) db.inventory.aggregate([ { $match : { "product_attributes" : { $exists : false } } } ]) - フィールドはドキュメントまたは配列と等しい
ワイルドカード インデックスは、ドキュメントまたは配列自体ではなく、ドキュメントまたは配列の内容に対してエントリを生成します。 したがって、ワイルドカード インデックスはドキュメント/配列の完全な等価一致をサポートできません。 ワイルドカード インデックスは、フィールドが空のドキュメント
{}
と等しいクエリをサポートできます。たとえば、コレクション
inventory
とワイルドカード インデックスがproduct_attributes
にあるコレクションを考えてみましょう。 ワイルドカード インデックスは次のクエリをサポートしていません。db.inventory.find({ "product_attributes" : { "price" : 29.99 } } ) db.inventory.find({ "product_attributes.tags" : [ "waterproof", "fireproof" ] } ) db.inventory.aggregate([{ $match : { "product_attributes" : { "price" : 29.99 } } }]) db.inventory.aggregate([{ $match : { "product_attributes.tags" : ["waterproof", "fireproof" ] } } }]) - フィールドはドキュメントまたは配列と等しくない
ワイルドカード インデックスは、ドキュメントまたは配列自体ではなく、ドキュメントまたは配列の内容に対してエントリを生成します。 したがって、ワイルドカード インデックスはドキュメントと配列の不等価一致をサポートできません。
たとえば、コレクション
inventory
とワイルドカード インデックスがproduct_attributes
にあるコレクションを考えてみましょう。 ワイルドカード インデックスは次のクエリをサポートしていません。db.inventory.find( { $ne : [ "product_attributes", { "price" : 29.99 } ] } ) db.inventory.find( { $ne : [ "product_attributes.tags", [ "waterproof", "fireproof" ] ] } ) db.inventory.aggregate([{ $match : { $ne : [ "product_attributes", { "price" : 29.99 } ] } }]) db.inventory.aggregate([{ $match : { $ne : [ "product_attributes.tags", [ "waterproof", "fireproof" ] ] } }]) - 配列フィールドが null と等しいか null と等しくない
特定のフィールドがコレクション内のいずれかのドキュメントの配列である場合、ワイルドカード インデックスはそのフィールドが等しい、または null と等しくないドキュメントのクエリをサポートできません。
たとえば、コレクション
inventory
とワイルドカード インデックスがproduct_attributes
にあるコレクションを考えてみましょう。product_attributes.tags
がコレクション内のいずれかのドキュメントの配列である場合、ワイルドカード インデックスは次のクエリをサポートできません。db.inventory.find( { "product_attributes.tags": { $ne: null } } ) db.inventory.find( { "product_attributes.tags": null } ) db.inventory.aggregate([{ $match : { "product_attributes.tags": { $ne: null } } }]) db.inventory.aggregate([{ $match : { "product_attributes.tags": null } }]) - フィールドが null に等しい
ワイルドカード インデックスは、フィールドが null に等しいドキュメントのクエリをサポートしていません。 クエリ
{ $eq: null }
は、 フィールドが null または欠落しているすべてのドキュメントと一致します。 ワイルドカードはスパースであるため、インデックス フィールドが欠落しているドキュメントはインデックスされないため、null との一致をサポートできません。たとえば、コレクション
inventory
とワイルドカード インデックスがproduct_attributes
にあるコレクションを考えてみましょう。 ワイルドカード インデックスは次のクエリをサポートしていません。db.inventory.find( { "product_attributes.price": { $eq: null } } ) db.inventory.aggregate([{ $match : { "product_attributes.price": { $eq: null } } }])
シャーディング
ワイルドカード インデックスを使用してコレクションをシャーディングすることはできません。 シャーディングしたいフィールドに非ワイルドカード インデックスを作成します。 シャードキー選択の詳細については、「シャードキー 」を参照してください。