Visão geral
Neste guia, você pode aprender como especificar quais documentos retornar de uma operação de leitura usando os seguintes métodos:
limit(): especifica o número máximo de documentos para retornar de uma query.sort(): especifica a ordem de classificação para os documentos devolvidos.skip(): especifica o número de documentos a ignorar antes de retornar os resultados da query.
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 tutorial Introdução ao PyMongo .
Limite
Para especificar o número máximo de documentos retornados de uma operação de leitura, chame o método limit() .
O exemplo a seguir encontra todos os restaurantes que têm um valor de campo cuisine de "Italian" e limita os resultados a 5 documentos. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
results = restaurants.find({ "cuisine" : "Italian"}).limit(5) for restaurant in results: print(restaurant["name"])
results = restaurants.find({ "cuisine" : "Italian"}).limit(5) async for restaurant in results: print(restaurant["name"])
Você também pode limitar o número de documentos retornados especificando o parâmetro limit em seu método find(). Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
results = restaurants.find({ "cuisine" : "Italian"}, limit=5) for restaurant in results: print(restaurant["name"])
results = restaurants.find({ "cuisine" : "Italian"}, limit=5) async for restaurant in results: print(restaurant["name"])
Dica
Os exemplos anteriores retornam os cinco primeiros documentos retornados pela query, sem uma ordem específica. A seção seguinte descreve como devolver os documentos em uma ordem de classificação especificada.
Sort
Para retornar documentos em uma ordem especificada, chame o método sort() . O método sort() utiliza dois parâmetros: o campo para classificar os resultados por e uma direção de classificação. Para especificar a direção de classificação, especifique pymongo.ASCENDING ou pymongo.DESCENDING. ASCENDING classifica os valores do mais baixo para o mais alto e DESCENDING os classifica do mais alto para o mais baixo. Se você não especificar nenhuma das direções, o método assumirá como padrão a classificação em ordem crescente.
O exemplo a seguir retorna todos os documentos com o valor cuisine de "Italian", classificados em ordem crescente. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
results = restaurants.find({ "cuisine" : "Italian"}).sort("name", pymongo.ASCENDING) for restaurant in results: print(restaurant["name"])
results = restaurants.find({ "cuisine" : "Italian"}).sort("name", pymongo.ASCENDING) async for restaurant in results: print(restaurant["name"])
Você também pode classificar documentos especificando o parâmetro sort em seu método find(). O exemplo seguinte especifica o parâmetro sort para retornar os resultados na mesma ordem do exemplo anterior. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
results = restaurants.find({ "cuisine" : "Italian"}, sort={"name": pymongo.ASCENDING} ) for restaurant in results: print(restaurant["name"])
results = restaurants.find({ "cuisine" : "Italian"}, sort={"name": pymongo.ASCENDING} ) async for restaurant in results: print(restaurant["name"])
Ignorar
Para ignorar um número específico de documentos antes de retornar os resultados da query, chame o método skip() e passe o número de documentos a serem ignorados. O método skip() ignora o número especificado de documentos nos resultados da query e retorna o restante.
O exemplo a seguir retorna todos os documentos que têm um valor de campo borough de "Manhattan" e ignora os primeiros 10 documentos. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
results = restaurants.find({ "borough" : "Manhattan"}, skip=10) for restaurant in results: print(restaurant["name"])
results = restaurants.find({ "borough" : "Manhattan"}, skip=10) async for restaurant in results: print(restaurant["name"])
Você também pode ignorar documentos devolvidos usando o parâmetro skip do método find(). O exemplo a seguir especifica o mesmo skip que o exemplo anterior. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
results = restaurants.find({ "borough" : "Manhattan"}, skip=10) for restaurant in results: print(restaurant["name"])
results = restaurants.find({ "borough" : "Manhattan"}, skip=10) async for restaurant in results: print(restaurant["name"])
Combinar Limite, Classificar e Ignorar
Você pode combinar os métodos limit(), sort() e skip() em uma única operação. Isso permite que você defina um número máximo de documentos classificados para retornar, ignorando um número específico de documentos antes de retornar.
O exemplo a seguir retorna documentos com o valor cuisine de "Italian". Os resultados são classificados em ordem alfabética, ignorando os primeiros 10 documentos. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
results = restaurants.find({ "cuisine" : "Italian"}) \ .sort("name", pymongo.ASCENDING) \ .limit(5) \ .skip(10) for restaurant in results: print(restaurant["name"])
results = restaurants.find({ "cuisine" : "Italian"}) \ .sort("name", pymongo.ASCENDING) \ .limit(5) \ .skip(10) async for restaurant in results: print(restaurant["name"])
Observação
A ordem em que você chama esses métodos não altera os documentos que são devolvidos. O driver reordena automaticamente as chamadas para executar primeiro as operações de classificação e skip e, em seguida, a operação de limite.
Você também pode limitar, classificar e ignorar resultados especificando-os como parâmetros no método find(). O exemplo a seguir especifica a mesma query do exemplo anterior. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
results = restaurants.find({ "cuisine" : "Italian"}, limit=5, sort={"name": pymongo.ASCENDING}, skip=10) for restaurant in results: print(restaurant["name"])
results = restaurants.find({ "cuisine" : "Italian"}, limit=5, sort={"name": pymongo.ASCENDING}, skip=10) async for restaurant in results: print(restaurant["name"])
Informações adicionais
Para obter mais informações sobre como especificar uma query, consulte Especificar uma query.
Para obter mais informações sobre como recuperar documentos, consulte Localizar documentos.
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: