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

照合

項目一覧

  • 照合ドキュメント
  • 照合をサポートする操作
  • 動作
  • 制限事項

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

コレクションまたはビュー、インデックス、または照合をサポートする特定の操作の照合順序を指定できます。

MongoDB Atlas UI でドキュメントに対してクエリを実行するときに照合を指定するには、 照合の指定」 を参照してください。

照合ドキュメントには、次のフィールドがあります。

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

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

デフォルトの照合パラメータ値は、指定するロケールによって異なります。 デフォルトの照合パラメータとそれに関連するロケールの完全なリストについては、「 照合のデフォルト パラメータ 」を参照してください。

フィールド
タイプ
説明
locale
string

ICU のロケールです。サポート対象のロケールのリストについては、「サポートされている言語とロケール」を参照してください。

単純なバイナリ比較を指定するには、"simple"locale 値を指定します。

strength
integer

任意。実行する比較のレベルです。ICU 比較レベルに対応しています。可能な値は次のとおりです。

説明
1
プライマリ レベルの比較。照合では、基本文字のみの比較を実行し、発音区別記号や大文字と小文字の違いなどの他の相違は無視されます。
2
セカンダリ レベルの比較。照合で、発音区別記号などの二次的な相違まで比較を実行します。つまり、照合では基本文字(プライマリの相違)と発音区別記号(セカンダリの相違)の比較が実行されます。基本文字同士の違いは、二次的な違いよりも優先されます。
3

三次レベルの比較。照合では、大文字と小文字の相違や文字の相違など、三次的な相違まで比較を実行します。つまり、照合では、基本文字(プライマリの相違)、発音区別符号(セカンダリの相違)、大文字と小文字と異表記(三次の相違)を比較します。基本文字間の相違はセカンダリの相違よりも優先され、セカンダリの相違は三次レベルの相違よりも優先されます。

これがデフォルトのレベルです。

4
四次レベル。プライマリから三次までのレベルで句読点を無視する場合や、日本語のテキストを処理する場合に、句読点を考慮する特定のユースケースに限定されます。
5
同一レベル。タイブレークの場合の特定のユースケースに限定されます。

詳細については、「ICU照合:比較レベル」を参照してください。

caseLevel
ブール値

任意。strength レベル 1 または 2 で、大文字と小文字の比較を含めるかどうかを決定するフラグです。

true の場合、大文字と小文字の比較が含まれます。

  • strength:1 と共に使用すると、照合では基本文字と大文字と小文字が比較されます。

  • strength:2 と共にに使用すると、照合では、基本文字、発音区別符号(および他のセカンダリ レベルの相違がある場合があります)、大文字と小文字が比較されます。

false の場合、レベル 1 またはレベル 2 での大文字と小文字の比較が含まれません。デフォルトは false に設定されています。

詳細については、「ICU 照合: ケース レベル」を参照してください。

caseFirst
string

任意。三次レベルの比較中に、大文字と小文字の相違のソート順序を決定するフィールドです。

可能な値は次のとおりです。

説明
"upper"
大文字が小文字の前にソートされます。
"lower"
小文字が大文字の前にソートされます。
"off"
デフォルト値。"lower" と似ていますが、若干の違いがあります。相違の詳細については、https://unicode-org.github.io/icu/userguide/strings/properties.html#customization を参照してください。
numericOrdering
ブール値

任意。数字の文字列を数値として比較するか、文字列として比較するかを決定するフラグです。

true の場合は、数値として比較します。たとえば、"10""2" より大きいです。

false の場合は、文字列として比較します。たとえば、"10""2" より小さいです。

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

numericOrdering の制限」を参照してください。

alternate
string

任意。照合で、空白と句読点を比較目的の基本文字として考慮するかどうかを決定するフィールドです。

可能な値は次のとおりです。

説明
"non-ignorable"
空白と句読点は基本文字と見なされます。
"shifted"
空白文字と句読点は基本文字とは見なされず、強度のレベルが 3 より高い場合にのみ区別されます。

「 ICU照合:比較レベル 」を参照してください。 詳しくは、 を参照してください。

デフォルトは、"non-ignorable" に設定されています。

maxVariable
string

任意。alternate: "shifted" の場合に無視可能と見なされる文字数を決定するフィールドです。alternate: "non-ignorable" の場合は効果がありません。

可能な値は次のとおりです。

説明
"punct"
空白も句読点も無視可能となり、基本文字とはみなされません。
"space"
空白は無視可能となり、基本文字とは見なされません。
backwards
ブール値

任意。発音区別符号付きの文字列を、文字列の後ろからソートするかどうかを決定するフラグです(フランス語の辞書の順序など)。

true の場合は、後ろから前に比較します。

false の場合は、前から後ろに比較します。

デフォルト値は false です。

normalization
ブール値

任意。テキストに正規化が必要かどうかを確認し、正規化を実行するかどうかを決定するフラグです。一般的に、テキストの大部分はこの正規化プロセシングを必要としません。

true の場合は、完全に正規化されているかどうかを確認し、正規化を実行してテキストを比較します。

false の場合はチェックしません。

デフォルト値は false です。

https://unicode-org.github.io/icu/userguide/collation/concesss.html# Normalization を参照してください 詳細については、「 」を参照してください。

次の操作の照合順序を指定できます。

注意

1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。

[1](1, 2) 一部のインデックスの種類では、照合はサポートされていません。詳細については、「照合とサポートされていないインデックス タイプ」を参照してください。

一部の照合ロケールには、言語固有の特別なルールを使用するバリアントがあります。ロケール バリアントを指定するには、次の構文を使用します。

{ "locale" : "<locale code>@collation=<variant>" }

たとえば、中国語照合の unihan バリアントを使用するには、次のようにします。

{ "locale" : "zh@collation=unihan" }

すべての照合ロケールとそのバリエーションの完全なリストについては、「照合ロケール」を参照してください。

  • ビューの作成時にデフォルトの照合を指定できます。照合順序が指定されていない場合、ビューのデフォルトの照合は "simple" バイナリ比較照合子です。つまり、ビューはコレクションのデフォルトの照合を継承しません。

  • ビューでの文字列比較では、ビューのデフォルトの照合方法が使用されます。ビューのデフォルトの照合方法を変更または上書きしようとする操作は、エラーとなり、失敗します。

  • 別のビューからビューを作成する場合、ソース ビューの照合方法と異なる照合方法を指定することはできません。

  • 複数のビューが関わる集計($lookup$graphLookup など)が実行される場合、それらのビューには同じ照合が含まれる必要があります。

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

警告

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

たとえば、コレクション myColl には、照合ロケール "fr" を持つ文字列フィールド category のインデックスがあります。

db.myColl.createIndex( { category: 1 }, { collation: { locale: "fr" } } )

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

db.myColl.find( { category: "cafe" } ).collation( { locale: "fr" } )

ただし、デフォルトで「シンプル」なバイナリー コレータを使用する次のクエリ操作では、インデックスを使用できません。

db.myColl.find( { category: "cafe" } )

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

たとえば、myColl コレクションには、数値フィールドの scoreprice、および 文字列フィールドの category の複合インデックスがあります。このインデックスは、文字列比較用の照合ロケール "fr" を使用して作成されます。

db.myColl.createIndex(
{ score: 1, price: 1, category: 1 },
{ collation: { locale: "fr" } } )

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

db.myColl.find( { score: 5 } ).sort( { price: 1 } )
db.myColl.find( { score: 5, price: { $gt: NumberDecimal( "10" ) } } ).sort( { price: 1 } )

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

db.myColl.find( { score: 5, category: "cafe" } )

重要

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

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

Tip

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

numericOrderingtrue と指定する場合、以下の制限が適用されます。

  • 比較では、連続する負でない整数のサブストリングのみが考慮されます。

    numericOrdering は、以下をサポートしません。

    • +

    • -

    • 小数点記号(小数点や小数点カンマなど)

    • 指数

  • 数値または 10 進数(ND)カテゴリの Unicode コード ポイントだけが数字として扱われます。

  • 数字の長さが 254 文字を超える場合、超過文字は別の数字として扱われます。

次の文字列の数値および 10 進数値を含むコレクションを検討します。

db.c.insertMany(
[
{ "n" : "1" },
{ "n" : "2" },
{ "n" : "2.1" },
{ "n" : "-2.1" },
{ "n" : "2.2" },
{ "n" : "2.10" },
{ "n" : "2.20" },
{ "n" : "-10" },
{ "n" : "10" },
{ "n" : "20" },
{ "n" : "20.1" }
]
)

次の find クエリは、numericOrdering パラメータを含む照合ドキュメントを使用します。

db.c.find(
{ }, { _id: 0 }
).sort(
{ n: 1 }
).collation( {
locale: 'en_US',
numericOrdering: true
} )

この操作は次の結果を返します。

[
{ n: '-2.1' },
{ n: '-10' },
{ n: '1' },
{ n: '2' },
{ n: '2.1' },
{ n: '2.2' },
{ n: '2.10' },
{ n: '2.20' },
{ n: '10' },
{ n: '20' },
{ n: '20.1' }
]
  • numericOrdering: true の場合、文字列値を数値のように昇順でソートします。

  • 2 つの負の値 -2.1-10 は、サポート対象外の - の文字が使われているため、期待どおりのソート順序でソートされません。

  • numericOrdering パラメータは 10 進数をサポートしていないため、値 2.2 は値 2.10 より前にソートされます。

  • その結果、2.22.10 は辞書順にソートされます。

戻る

参照