Использование .sort с PyMongo

109

С PyMongo, когда я пытаюсь получить объекты, отсортированные по их полям «номер» и «дата» следующим образом:

db.test.find({"number": {"$gt": 1}}).sort({"number": 1, "date": -1})

Я получаю такую ​​ошибку:

TypeError: if no direction is specified, key_or_list must be an instance of list

Что не так с моим запросом на сортировку?

KennyPowers
источник

Ответы:

206

sort должен быть список пар ключ-направление, то есть

db.test.find({"number": {"$gt": 1}}).sort([("number", 1), ("date", -1)])

Причина, по которой это должен быть список, заключается в том, что порядок аргументов имеет значение, а dicts не упорядочены в Python <3.6

Георг
источник
29
Причина того, что это список в Python, заключается в том, что порядок аргументов в sort()значениях и словах не упорядочен в Python.
André Laszlo
@ AndréLaszlo можно ли использовать OrderedDict ()?
zakdances
9
Это сэкономило мне массу исследований. Маленькая книга MongoDB вводит в заблуждение в примерах сортировки.
Dogukan Tufekci
4
Если это только одно поле, это может быть .sort ("_ id", 1)
Haris Np
2
в python3.6 + dicts упорядочены, поэтому, если кто-то готов к этому, может быть стоит запрос на перенос в pymongo, чтобы привести его в соответствие с общим синтаксисом mongodb. Конечно, это не сработает при запуске pymongo на старых версиях Python ..
thiezn