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?

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.