Comment obtenir une valeur minimale dans pyMongo

8

J'ai une collection avec plusieurs champs et j'aimerais obtenir la valeur minimale d'un. Je connais une commande pour obtenir la valeur maximale:

collection.find_one(sort=[("myfield", -1)])["myfield"]

mais pas pour avoir le min. Y a-t-il un moyen de faire cela?

Hatchepsout
la source

Réponses:

10

Vous pouvez inverser le sens du tri pour obtenir le minimum au lieu de la valeur maximale:

 # Sort by myfield (ascending value) and return first document
 collection.find_one(sort=[("myfield", 1)])["myfield"]

Cet exemple suppose que:

  • myfield est une valeur numérique (donc l'ordre de tri est logique pour déterminer un minimum ou un maximum)
  • myfieldexiste dans le document correspondant renvoyé (sinon Python signalera un KeyErrorlors de la tentative de référence à un champ inexistant).
  • tous les documents de la collection ont une myfieldvaleur (les documents qui n'ont pas de myfieldvaleur seront triés avant les valeurs numériques minimales)

Pour vous assurer que votre tri est basé sur des documents qui ont réellement une myfieldvaleur, vous pouvez ajouter $existsaux critères de requête:

 collection.find_one({"myfield": {"$exists": True}}, sort=[("myfield", 1)])["myfield"]

Pour plus d'informations sur le tri, voir:

Stennie
la source