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?

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.