照合は、スペイン語やドイツなどの特定の言語の規則に準拠する string を比較するときに使用するルールのセットを提供します。 照合が指定されていない場合、サーバーはバイナリ比較に基づいてstringをソートします。 ただし、多くの言語には特定の順序付けルールと照合順序があるため、ユーザーはこれらのルールに準拠したアプリケーションをビルドできます。
たとえば、フランス語では、特定の単語の最後のアクセントによって並べ替え順序が決まります。 次の例では、フランス語の 4 単語の正しいソート順序を示しています。
cote < côte < coté < côté
フランス語の照合を指定すると、ユーザーはフランス語のソート順序で string フィールドをソートできるようになります。
使用法
コレクション、インデックス、またはCRUD コマンドの照合順序を指定できます。
照合パラメータ:
照合を指定するには、 ~pymongo.collation.Collation
モデルまたは Python 辞書 を使用します。 どちらの場合も、構造は同じです。
Collation(locale=<string>, caseLevel=<bool>, caseFirst=<string>, strength=<int>, numericOrdering=<bool>, alternate=<string>, maxVariable=<string>, backwards=<bool>)
必要なパラメータはlocale
のみです。サーバーはこれをICU 形式のロケール IDとして解析します。 たとえば、米国英語を表す場合はlocale
をen_US
に設定し、カナダフランス語を表す場合はfr_CA
を設定します。
コレクションへのデフォルトの照合の割り当て
次の例では、 contacts
という新しいコレクションを作成し、 fr_CA
ロケールでデフォルトの照合を割り当てる方法を示します。 この操作により、別の照合が明示的に指定されていない限り、 contacts
コレクションに対して実行されるすべてのクエリでfr_CA
照合が使用されるようになります。
from pymongo import MongoClient from pymongo.collation import Collation db = MongoClient().test collection = db.create_collection('contacts', collation=Collation(locale='fr_CA'))
インデックスへのデフォルト照合の割り当て
新しいインデックスを作成するときに、デフォルトの照合を指定できます。
次の例は、 contacts
コレクションのname
フィールドにインデックスを作成する方法を示しています。 unique
パラメータは有効になっており、 locale
はfr_CA
に設定されているデフォルトの照合です。
from pymongo import MongoClient from pymongo.collation import Collation contacts = MongoClient().test.contacts contacts.create_index('name', unique=True, collation=Collation(locale='fr_CA'))
クエリの照合の指定
クエリは、結果をソートするときに使用する照合を指定できます。 次の例では、 test
データベース内のcontacts
コレクションに対して実行されるクエリを示します。 city
フィールドにNew York
を含むドキュメントに一致し、 name
フィールドではfr_CA
照合でソートします。
from pymongo import MongoClient from pymongo.collation import Collation collection = MongoClient().test.contacts docs = collection.find({'city': 'New York'}).sort('name').collation( Collation(locale='fr_CA'))
その他のクエリ タイプ
照合を使用すると、いくつかの異なるタイプのクエリのドキュメント一致ルールを制御できます。 アップデート操作または削除操作を実行するすべてのメソッドは照合をサポートしており、 locale
パラメータで使用可能な言語とバリアントのいずれかに準拠するために、照合を使用するクエリフィルターを作成できます。
次の例では、 strength
を~pymongo.collation.CollationStrength.SECONDARY
に設定して照合を使用します。これでは、string 比較における基本文字と文字のアクセントのみが考慮されますが、大文字と小文字の区別はありません。 first_name
フィールドにjürgen
(大文字と小文字を区別しない)を持つcontacts
コレクション内のすべてのドキュメントが更新されます。
from pymongo import MongoClient from pymongo.collation import Collation, CollationStrength contacts = MongoClient().test.contacts result = contacts.update_many( {'first_name': 'jürgen'}, {'$set': {'verified': 1}}, collation=Collation(locale='de', strength=CollationStrength.SECONDARY))