Docs Menu
Docs Home
/ / /
PyMongo Driver

Collations

Collations provide a set of rules to use when comparing strings that comply with the conventions of a particular language, such as Spanish or German. If no collation is specified, the server sorts strings based on a binary comparison. However, many languages have specific ordering rules, and collations allow users to build applications that adhere to these rules.

In French, for example, the last accent in a given word determines the sorting order. The following example shows the correct sorting order for four words in French:

cote < côte < coté < côté

Specifying a French collation allows users to sort string fields using the French sort order.

You can specify a collation for a collection, an index, or a CRUD command.

You can specify a collation by using the ~pymongo.collation.Collation model or Python dictionaries. In either case, the structure is the same:

Collation(locale=<string>,
caseLevel=<bool>,
caseFirst=<string>,
strength=<int>,
numericOrdering=<bool>,
alternate=<string>,
maxVariable=<string>,
backwards=<bool>)

The only required parameter is locale, which the server parses as an ICU format locale ID. For example, set locale to en_US to represent US English or fr_CA to represent Canadian French.

The following example demonstrates how to create a new collection called contacts and assign a default collation with the fr_CA locale. This operation ensures that all queries that are run against the contacts collection use the fr_CA collation unless another collation is explicitly specified.

from pymongo import MongoClient
from pymongo.collation import Collation
db = MongoClient().test
collection = db.create_collection('contacts',
collation=Collation(locale='fr_CA'))

When creating a new index, you can specify a default collation.

The following example shows how to create an index on the name field of the contacts collection, with the unique parameter enabled and a default collation with locale set to 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'))

A query can specify a collation to use when sorting results. The following example demonstrates a query that runs on the contacts collection in the test database. It matches on documents that contain New York in the city field, and sorts on the name field with the fr_CA collation.

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'))

You can use collations to control document-matching rules for several different types of queries. All methods that perform update or delete operations support collation, and you can create query filters that use collations to comply with any of the languages and variants available to the locale parameter.

The following example uses a collation with strength set to ~pymongo.collation.CollationStrength.SECONDARY, which considers only the base character and character accents in string comparisons, but not case-sensitivity, for example. All documents in the contacts collection with jürgen (case-insensitive) in the first_name field are updated.

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))

Next

MongoDB PyMongo Documentation

On this page