Utilizzo di .sort con PyMongo


109

Con PyMongo, quando provo a recuperare oggetti ordinati per i loro campi 'numero' e 'data' in questo modo:

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

Ottengo questo errore:

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

Cosa c'è di sbagliato nella mia query di ordinamento?

Risposte:


206

sort dovrebbe essere un elenco di coppie chiave-direzione, cioè

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

Il motivo per cui questo deve essere un elenco è che l'ordine degli argomenti è importante e le dicts non sono ordinate in Python <3.6


29
Il motivo per cui questo è un elenco in Python è che l'ordinamento degli argomenti per sort()argomenti e dettami non è ordinato in Python.
— André Laszlo

@ AndréLaszlo può essere utilizzato un OrderedDict ()?
— zakdances

9
Questo mi ha risparmiato un sacco di ricerche. Il libro Little MongoDB inganna gli esempi di ordinamento.
— Dogukan Tufekci

4
Se è un solo campo, può essere .sort ("_ id", 1)
— Haris Np

2
in python3.6 + i dict sono ordinati, quindi se qualcuno è d'accordo, potrebbe valere la pena una richiesta pull a pymongo per allinearlo alla sintassi generica di mongodb. Ovviamente questo non funzionerebbe quando si esegue pymongo su versioni precedenti di Python ..
— Thiezn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.