Sử dụng .sort với PyMongo


109

Với PyMongo, khi tôi cố gắng truy xuất các đối tượng được sắp xếp theo trường 'số' và 'ngày' của chúng như sau:

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

Tôi gặp 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?

Câu trả lời:


206

sort nên là một danh sách các cặp hướng chính, nghĩa là

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

Lý do tại sao đây phải là một danh sách là thứ tự của các đối số quan trọng và dicts không được sắp xếp trong Python <3.6


29
Lý do mà đây là một danh sách trong Python là thứ tự của các đối số cho sort()các vấn đề và sự khác biệt không được sắp xếp theo thứ tự trong Python.
André Laszlo

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

9
Điều này đã tiết kiệm cho tôi rất nhiều nghiên cứu. Sách MongoDB Nhỏ gây hiểu lầm trong các ví dụ sắp xếp.
Dogukan Tufekci

4
Nếu nó chỉ là một trường, nó có thể là .sort ("_ id", 1)
Haris Np

2
trong python3.6 + dicts được đặt hàng, vì vậy nếu bất kỳ ai thích nó, có thể đáng để yêu cầu kéo pymongo để đưa nó phù hợp với cú pháp mongodb chung. Tất nhiên điều này sẽ không hoạt động khi chạy pymongo trên các phiên bản python cũ hơn ..
thiezn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.