Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

大文字と小文字を区別しないインデックス

項目一覧

  • コマンド構文
  • 動作
  • 大文字と小文字を区別しないインデックスを作成する
  • デフォルトの照合順序を持つコレクションの大文字と小文字を区別しないインデックス

大文字と小文字を区別しないインデックスは、大文字と小文字を区別せずにstring を比較するクエリをサポートします。 大文字と小文字の不区別は照合に由来します。

重要

collation オプションを指定すると、db.collection.createIndex() で大文字と小文字を区別しないインデックスを作成できます。

db.collection.createIndex(
{
<field>: <sortOrder>
},
{
collation:
{
locale : <locale>,
strength : < 1 | 2 >
}
}
)

大文字と小文字を区別しないインデックスの照合を指定するには、 collationオブジェクトに次のフィールドを含めます。

フィールド
説明

locale

言語の規則を指定します。使用可能なロケールのリストについては、「サポートされている言語とロケール」を参照してください。

strength

比較ルールを決定します。strength値が1または2の場合は、大文字と小文字を区別しない照合を示します。

その他の照合フィールドについては「照合」を参照してください。

照合を指定するインデックスを使用するには、クエリ操作とソート操作でインデックスと同じ照合を指定する必要があります。コレクションで照合が定義されている場合、別の照合を明示的に指定しない限り、すべてのクエリとインデックスがその照合を継承します。

デフォルトの照合がないコレクションで大文字と小文字を区別しないインデックスを使用するには、照合を指定してインデックスを作成し、strength パラメーターを 1 または 2 に設定します(strength パラメーターの説明については、「照合」 を参照してください)。インデックス レベルの照合を使用するには、クエリ レベルで同じ照合を指定する必要があります。

次の例では、デフォルトの照合なしでコレクションを作成し、大文字と小文字を区別しない照合で type フィールドにインデックスを追加します。

db.createCollection("fruit")
db.fruit.createIndex(
{ type: 1 },
{ collation: { locale: 'en', strength: 2 } }
)

インデックスを使用するには、クエリによって同じ照合を指定する必要があります。

db.fruit.insertMany( [
{ type: "apple" },
{ type: "Apple" },
{ type: "APPLE" }
] )
db.fruit.find( { type: "apple" } ) // does not use index, finds one result
db.fruit.find( { type: "apple" } ).collation( { locale: 'en', strength: 2 } )
// uses the index, finds three results
db.fruit.find( { type: "apple" } ).collation( { locale: 'en', strength: 1 } )
// does not use the index, finds three results

デフォルトの照合を使用してコレクションを作成すると、他の照合を指定しない限り、作成されするすべてのインデックスがその照合を継承します。別の照合が指定されていないクエリも、すべてデフォルトの照合を継承します。

次の例では、デフォルトの照合で names というコレクションを作成し、first_name フィールドにインデックスを作成します。

db.createCollection("names", { collation: { locale: 'en_US', strength: 2 } } )
db.names.createIndex( { first_name: 1 } ) // inherits the default collation

名前の小規模なコレクションを挿入します。

db.names.insertMany( [
{ first_name: "Betsy" },
{ first_name: "BETSY"},
{ first_name: "betsy"}
] )

このコレクションのクエリは、デフォルトで指定された照合順序を使用し、可能であればインデックスも使用します。

db.names.find( { first_name: "betsy" } )
// inherits the default collation: { collation: { locale: 'en_US', strength: 2 } }
// finds three results

上記の操作では、コレクションのデフォルトの照合順序を使用して、3 つのドキュメントすべてが検索されます。パフォーマンスを向上させるために、 first_nameフィールドのインデックスを使用します。

クエリで別の照合を指定すれば、このコレクションでも大文字と小文字を区別した検索を実行できます。

db.names.find( { first_name: "betsy" } ).collation( { locale: 'en_US' } )
// does not use the collection's default collation, finds one result

上記の操作で使用される照合には、strength 値の指定がないため、検索では 1 件のドキュメントしか見つかりません。コレクションのデフォルトの照合またはインデックスは使用されません。

戻る

部分インデックス