Використання .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 можна використовувати OrdersDict ()?
zakdances

9
Це врятувало мені тонну досліджень. Книга Little MongoDB вводить в оману на прикладах сортування.
Dogukan Tufekci

4
Якщо це лише одне поле, воно може бути .sort ("_ id", 1)
Haris Np

2
у python3.6 + дикти впорядковані, тому, якщо хтось готовий до цього, можливо, варто звернутись із запитом на pymongo, щоб привести його у відповідність із загальним синтаксисом mongodb. Звичайно, це не буде працювати при запуску pymongo на старих версіях python ..
thiezn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.