Как получить минимальное значение в pyMongo

8

У меня есть коллекция с несколькими полями, и я хотел бы получить минимальное значение из одного. Я знаю команду для получения максимального значения:

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

но не один для получения мин. Есть ли способ сделать это?

Хатшепсут
источник

Ответы:

10

Вы можете изменить направление сортировки, чтобы получить минимальное вместо максимального значения:

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

В этом примере предполагается, что:

  • myfield является числовым значением (поэтому порядок сортировки имеет смысл определять минимум или максимум)
  • myfieldсуществует в соответствующем возвращенном документе (в противном случае Python сообщит KeyErrorпри попытке сослаться на несуществующее поле).
  • все документы в коллекции имеют myfieldзначение (документы, у которых нет myfieldзначения, будут отсортированы до минимальных числовых значений)

Чтобы убедиться, что сортировка основана на документах, которые действительно имеют myfieldзначение, которое вы можете добавить $existsв критерии запроса:

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

Для получения дополнительной информации о сортировке см .:

Stennie
источник