Menu Docs
Página inicial do Docs
/ / /
Driver Pymongo

Agrupamentos

Os agrupamentos fornecem um conjunto de regras a serem usadas ao comparar strings que cumprem as convenções de um idioma específico, como espanhol ou alemão. Se nenhum agrupamento for especificado, o servidor classificará as strings com base em uma comparação binária. No entanto, muitos idiomas têm regras de ordenação específicas, e agrupamentos permitem que os usuários criem aplicativos que sigam essas regras.

Em francês, por exemplo, o último acento em uma determinada palavra determina a ordem de classificação. O exemplo a seguir mostra a ordem de classificação correta para quatro palavras em francês:

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

A especificação de um agrupamento em francês permite que os usuários classifiquem os campos de string usando a ordem de classificação em francês.

Você pode especificar um agrupamento para umacoleção , um índice ou um comando CRUD.

Você pode especificar um agrupamento utilizando o modelo ~pymongo.collation.Collation ou dicionários Python. Em ambos os casos, a estrutura é a mesma:

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

O único parâmetro exigido é locale, que o servidor analisa como um ID de locale no formato ICU. Por exemplo, defina locale como en_US para representar o inglês dos EUA ou fr_CA para representar o francês canadense.

O exemplo a seguir demonstra como criar uma nova coleção chamada contacts e atribuir um agrupamento padrão com a locale fr_CA . Essa operação garante que todas as queries executadas na collection contacts usem o agrupamento fr_CA , a menos que outro agrupamento seja explicitamente especificado.

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

Ao criar um novo índice, você pode especificar um agrupamento padrão.

O exemplo a seguir mostra como criar um índice no campo name da collection contacts , com o parâmetro unique habilitado e um agrupamento padrão com locale definido como 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'))

Uma query pode especificar um agrupamento a ser usado ao classificar os resultados. O exemplo seguinte demonstra uma query que é executada na collection contacts no banco de dados de dados test . Ele corresponde a documentos que contêm New York no campo city e classifica no campo name com o agrupamento 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'))

Você pode usar agrupamentos para controlar regras de correspondência de documentos para vários tipos diferentes de consultas. Todos os métodos que executam operações de atualização ou exclusão suportam agrupamento, e você pode criar filtros de consulta que usam agrupamento para cumprir qualquer um dos idiomas e variantes disponíveis para o parâmetro locale .

O exemplo a seguir usa um agrupamento com strength definido como ~pymongo.collation.CollationStrength.SECONDARY, que considera apenas o caractere base e os acentos de caracteres em comparações de string , mas não a distinção entre maiúsculas e minúsculas, por exemplo. Todos os documentos na coleção contacts com jürgen (diferencia maiúsculas de minúsculas) no campo first_name são atualizados.

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

Nesta página