Использование .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

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

Ответы:


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.