Visão geral
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.
Dados de amostra
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.
distinct() Método
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.
Recuperar valores distintos em uma collection
O exemplo a seguir recupera os valores distintos do campo borough na coleção restaurants. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
results = restaurants.distinct("borough") for restaurant in results: print(restaurant)
Bronx Brooklyn Manhattan Missing Queens Staten Island
results = await 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.
Recuperar valores distintos em documentos especificados
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". Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
results = restaurants.distinct("borough", { "cuisine": "Italian" }) for restaurant in results: print(restaurant)
Bronx Brooklyn Manhattan Queens Staten Island
results = await restaurants.distinct("borough", { "cuisine": "Italian" }) for restaurant in results: print(restaurant)
Bronx Brooklyn Manhattan Queens Staten Island
Modificar comportamento distinto
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 |
|---|---|
| A query filter that specifies the documents to retrieve distinct
values from. |
| An instance of ClientSession. |
| A comment to attach to the operation. |
| The maximum amount of time to allow the operation to run, in
milliseconds. |
| 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. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
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 ...
results = await 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 ...
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: