2012-04-20 977 views
74

Với PyMongo, khi tôi cố gắng để lấy đối tượng được sắp xếp theo 'số' và 'date' lĩnh vực như thế này:Sử dụng .sort với PyMongo

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

tôi nhận được lỗi này:

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

Có gì sai với truy vấn sắp xếp của tôi?

Trả lời

137

sort phải là một danh sách các cặp khóa-hướng, đó là

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

Lý do tại sao điều này có phải là một danh sách là thứ tự của các đối số vấn đề và dict s không ra lệnh bằng Python.

+14

Lý do đây là danh sách trong Python là thứ tự của các đối số cho các vấn đề 'sort()' và các lệnh dicts không được sắp xếp theo Python. –

+0

@ AndréLaszlo có thể sử dụng OrderedDict()? – zakdances

+0

@yourfriendzak, tôi không sợ. Đó là một chút unpythonic, tôi đoán. [Đây là lý do tại sao] (http://api.mongodb.org/python/1.0/pymongo-pysrc.html#L70), tại dòng 70. Một OrderedDict không phải là một thể hiện của các loại.ListType. –