2012-04-20 25 views
74

Con PyMongo, cuando intento para recuperar objetos ordenados por su 'número' y los campos 'fecha' de esta manera:.Sort con PyMongo

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?

Respuesta

137

sort debe haber 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 asuntos argumentos y dict s no están ordenados en Python.

+14

La razón por la cual esta es una lista en Python es porque el orden de los argumentos para 'sort()' importa y los dicts no están ordenados en Python. –

+0

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

+0

@yourfriendzak, me temo que no. Es un poco antiponético, supongo. [Este es el motivo por el que] (http://api.mongodb.org/python/1.0/pymongo-pysrc.html#L70), en la línea 70. Un OrderedDict no es una instancia de types.ListType. –