Usando .sort con PyMongo


109

Con PyMongo, cuando intento recuperar objetos ordenados por sus campos de 'número' y 'fecha' como este:

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

Me sale este error:

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

¿Qué pasa con mi consulta de clasificación?

Respuestas:


206

sort debe ser una lista de pares clave-dirección, es decir

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

La razón por la que esto tiene que ser una lista es que el orden de los argumentos es importante y los dicts no están ordenados en Python <3.6


29
La razón por la que esta es una lista en Python es que el orden de los argumentos para sort()asuntos y dictados no está ordenado en Python.
André Laszlo

@ AndréLaszlo ¿se puede usar un OrderedDict ()?
zakdances

9
Esto me ahorró un montón de investigación. El Libro Little MongoDB confunde en ejemplos de ordenación.
Dogukan Tufekci

4
Si es solo un campo, puede ser .sort ("_ id", 1)
Haris Np

2
en python3.6 + los dictados están ordenados, por lo que si alguien está dispuesto a hacerlo, podría valer la pena hacer una solicitud de extracción a pymongo para alinearlo con la sintaxis genérica de mongodb. Por supuesto, esto no funcionaría cuando se ejecuta pymongo en versiones anteriores de Python ..
thiezn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.