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)myfieldexiste no documento correspondente retornado (caso contrário, o Python relatará um KeyErrorao tentar fazer referência a um campo inexistente).myfieldvalor (os documentos que não têm um myfieldvalor serão classificados antes dos valores numéricos mínimos)Para garantir que sua classificação seja baseada em documentos que realmente tenham um myfieldvalor, você pode adicionar $existsaos critérios de consulta:
collection.find_one({"myfield": {"$exists": True}}, sort=[("myfield", 1)])["myfield"]
Para mais informações sobre classificação, consulte: