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.