Verwenden von .sort mit PyMongo

108

Wenn ich mit PyMongo versuche, Objekte abzurufen, die nach den Feldern 'Nummer' und 'Datum' sortiert sind:

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

Ich erhalte diesen Fehler:

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

Was ist los mit meiner Sortierabfrage?

KennyPowers
quelle

Antworten:

205

sort sollte eine Liste von Schlüssel-Richtungs-Paaren sein, das heißt

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

Der Grund, warum dies eine Liste sein muss, ist, dass die Reihenfolge der Argumente wichtig ist und dicts in Python <3.6 nicht geordnet sind

georg
quelle
29
Der Grund, warum dies eine Liste in Python ist, ist, dass die Reihenfolge der Argumente zu sort()Angelegenheiten und Diktaten in Python nicht geordnet ist.
André Laszlo
@ AndréLaszlo kann ein OrderedDict () verwendet werden?
Zakdances
9
Das hat mir eine Menge Forschung erspart. Das Little MongoDB Book führt in Sortierbeispielen in die Irre.
Dogukan Tufekci
4
Wenn es nur ein Feld ist, kann es .sort ("_ id", 1) sein
Haris Np
2
in python3.6 + werden dicts bestellt. Wenn also jemand dazu bereit ist, ist es möglicherweise eine Pull-Anfrage an pymongo wert, um es mit der generischen Mongodb-Syntax in Einklang zu bringen. Natürlich würde dies nicht funktionieren, wenn Pymongo auf älteren Python-Versionen ausgeführt wird.
Thiezn