排序规则#

参见

API文档 collation .

排序是MongoDB 3.4版中的一个新功能。它们提供了一组规则,用于比较符合特定语言(如西班牙语或德语)约定的字符串。如果未指定排序规则,服务器将根据二进制比较对字符串进行排序。许多语言都有特定的排序规则,而排序规则允许用户构建遵循特定于语言的比较规则的应用程序。

例如,在法语中,给定单词的最后一个重音决定了排序顺序。以下四个法语单词的正确排序顺序是:

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

通过指定法语排序规则,用户可以使用法语排序顺序对字符串字段进行排序。

使用#

用户可以为 collection ,一个 index ,或者 CRUD command .

排序规则参数:#

排序规则可以用 Collation 或者使用纯Python字典。结构相同:

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

唯一必需的参数是 locale ,服务器将其解析为 ICU format locale ID 。例如,设置 localeen_US 代表美国英语或 fr_CA 代表加拿大法语。

有关可用参数的完整描述,请参见MongoDB manual .

为集合指定默认排序规则#

下面的示例演示如何创建名为 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'))

为索引指定默认排序规则#

创建新索引时,可以指定默认排序规则。

下面的示例演示如何在 name 领域 contacts 集合,与 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'))

指定查询的排序规则#

单个查询可以指定排序规则以在对结果排序时使用。下面的示例演示在上运行的查询 contacts 数据库中的集合 test . 它与包含 New Yorkcity 并在 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'))

其他查询类型#

您可以使用排序规则来控制几种不同类型查询的文档匹配规则。所有各种更新和删除方法 (update_one()update_many()delete_one() ,等等)支持排序规则,您可以创建使用排序规则以符合 locale 参数。

以下示例使用排序规则 strength 设置为 SECONDARY ,例如,它只考虑字符串比较中的基字符和字符重音,而不考虑区分大小写。中的所有文档 contacts 收藏 jürgen (不区分大小写)在 first_name 字段已更新:

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