Como obter valor mínimo no pyMongo

8

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?

Hatshepsut
fonte

Respostas:

10

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).
  • todos os documentos da coleção têm um 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:

Stennie
fonte