Usando .sort com PyMongo

108

Com o PyMongo, quando tento recuperar objetos classificados por seus campos 'número' e 'data' como este:

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

Eu recebo este erro:

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

O que há de errado com minha consulta de classificação?

KennyPowers
fonte

Respostas:

205

sort deve ser uma lista de pares de direção de chave, ou seja

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

A razão pela qual tem que ser uma lista é que a ordem dos argumentos importa e dictnão são ordenados em Python <3.6

georg
fonte
29
A razão pela qual esta é uma lista em Python é que a ordem dos argumentos para sort()questões e dictos não é ordenada em Python.
André Laszlo
@ AndréLaszlo pode ser usado um OrderedDict ()?
zakdances
9
Isso me salvou uma tonelada de pesquisas. O Pequeno Livro do MongoDB engana nos exemplos de classificação.
Dogukan Tufekci de
4
Se for apenas um campo, pode ser .sort ("_ id", 1)
Haris Np
2
em python3.6 + os dicts são ordenados, portanto, se alguém quiser, pode valer a pena uma solicitação pull para pymongo para alinhá-lo com a sintaxe mongodb genérica. Claro que isso não funcionaria ao executar o pymongo em versões mais antigas do python.
thiezn