2012-04-20 17 views
74

Con PyMongo, quando cerco di recuperare gli oggetti ordinati per loro 'numero' e 'Data' campi come questo:Utilizzando .Sort con PyMongo

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?

risposta

137

sort dovrebbe essere una lista di coppie-direzione chiave, cioè

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

Il motivo per cui questo deve essere una lista è che l'ordine degli argomenti materie e dict s non sono ordinati in Python.

+14

La ragione per cui questo è un elenco in Python è che l'ordinamento degli argomenti in 'sort()' importa e che i dit non sono ordinati in Python. –

+0

@ AndréLaszlo può essere utilizzato un OrderedDict()? – zakdances

+0

@yourfriendzak, temo di no. È un po 'unpitonico, immagino. [Ecco il motivo per cui] (http://api.mongodb.org/python/1.0/pymongo-pysrc.html#L70), alla riga 70. Un OrderedDict non è un'istanza di types.ListType. –