Menu Docs

Recuperar valores de campo distintos

Dentro de uma coleção, documentos diferentes podem conter valores diferentes para um único campo. Por exemplo, um documento restaurant tem um valor borough de "Manhattan" e outro tem um valor borough de "Queens". Com o PyMongo, você pode recuperar todos os valores distintos que um campo contém em vários documentos em uma collection.

Os exemplos neste guia usam a collection sample_restaurants.restaurants dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de amostra, consulte o Introdução ao PyMongo.

Para recuperar os valores distintos para um campo especificado, chame o método distinct() e passe o nome do campo para o qual você deseja encontrar valores distintos.

O exemplo seguinte recupera os valores distintos do campo borough na coleção restaurants :

results = restaurants.distinct("borough")
for restaurant in results:
print(restaurant)
Bronx
Brooklyn
Manhattan
Missing
Queens
Staten Island

Os resultados mostram cada valor distinto que aparece no campo borough em todos os documentos da coleção. Embora vários documentos tenham o mesmo valor no campo borough , cada valor aparece nos resultados apenas uma vez.

Você pode fornecer um filtro de query para o método distinct() para localizar os valores de campo distintos em um subconjunto de documentos em uma coleção. Um filtro de query é uma expressão que especifica os critérios do Atlas Search usados para corresponder a documentos em uma operação. Para obter mais informações sobre como criar um filtro de query, consulte Especificar uma query.

O exemplo a seguir recupera os valores distintos do campo borough para todos os documentos que têm um valor de campo cuisine de "Italian":

results = restaurants.distinct("borough", {
"cuisine": "Italian"
})
for restaurant in results:
print(restaurant)
Bronx
Brooklyn
Manhattan
Queens
Staten Island

O método distinct() aceita parâmetros opcionais, que representam opções que você pode utilizar para configurar a operação. Se você não especificar nenhuma opção, o driver não personalizará a operação.

A tabela a seguir descreve as opções que você pode definir para personalizar distinct():

Propriedade
Descrição

filter

A query filter that specifies the documents to retrieve distinct values from.

session

An instance of ClientSession.

comment

A comment to attach to the operation.

maxTimeMS

The maximum amount of time to allow the operation to run, in milliseconds.

collation

An instance of Collation.

O exemplo a seguir recupera os valores distintos do campo name para todos os documentos que têm um valor de campo borough de "Bronx" e um valor de campo cuisine de "Pizza". Ele também usa a opção comment para adicionar um comentário à operação.

results = restaurants.distinct("name",
{ "borough": "Bronx",
"cuisine": "Pizza" },
comment="Bronx pizza restaurants"
)
$1.25 Pizza
18 East Gunhill Pizza
2 Bros
Aenos Pizza
Alitalia Pizza Restaurant
...

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: