Eu tenho uma coleção com vários campos e gostaria de obter o valor mínimo de um. Conheço um comando para obter o valor máximo:
collection.find_one(sort=[("myfield", -1)])["myfield"]
mas não um para obter o min. Existe uma maneira de fazer isso?
Eu tenho uma coleção com vários campos e gostaria de obter o valor mínimo de um. Conheço um comando para obter o valor máximo:
collection.find_one(sort=[("myfield", -1)])["myfield"]
mas não um para obter o min. Existe uma maneira de fazer isso?
Respostas:
Você pode reverter a direção da classificação para obter o valor mínimo em vez do valor máximo:
# Sort by myfield (ascending value) and return first document
collection.find_one(sort=[("myfield", 1)])["myfield"]
Este exemplo assume que:
myfield
é um valor numérico (portanto, a ordem de classificação faz sentido para determinar um valor mínimo ou máximo)myfield
existe no documento correspondente retornado (caso contrário, o Python relatará um KeyError
ao tentar fazer referência a um campo inexistente).myfield
valor (os documentos que não têm um myfield
valor serão classificados antes dos valores numéricos mínimos)Para garantir que sua classificação seja baseada em documentos que realmente tenham um myfield
valor, você pode adicionar $exists
aos critérios de consulta:
collection.find_one({"myfield": {"$exists": True}}, sort=[("myfield", 1)])["myfield"]
Para mais informações sobre classificação, consulte: