การใช้. เรียงกับ PyMongo


109

ด้วย PyMongo เมื่อฉันพยายามดึงวัตถุที่เรียงลำดับตามฟิลด์ 'หมายเลข' และ 'วันที่' เช่นนี้:

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

ฉันได้รับข้อผิดพลาดนี้:

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

เกิดอะไรขึ้นกับคำค้นหาการจัดเรียงของฉัน

คำตอบ:


206

sort ควรเป็นรายการคู่ทิศทางหลักนั่นคือ

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

สาเหตุที่ต้องเป็นรายการคือลำดับของอาร์กิวเมนต์มีความสำคัญและdicts ไม่ได้เรียงลำดับใน Python <3.6


29
เหตุผลที่นี่เป็นรายการใน Python ก็คือการจัดลำดับอาร์กิวเมนต์ของsort()เรื่องและการเขียนตามคำบอกไม่ได้เรียงลำดับใน Python
André Laszlo

@ AndréLaszloสามารถใช้ OrderDict () ได้หรือไม่?
zakdances

9
สิ่งนี้ช่วยให้ฉันค้นคว้าได้มากมาย Little MongoDB Book ทำให้เข้าใจผิดในตัวอย่างการจัดเรียง
Dogukan Tufekci

4
หากเป็นเพียงช่องเดียวสามารถเป็น. short ("_ id", 1)
Haris Np

2
ใน python3.6 + จะได้รับคำสั่งดังนั้นหากใครก็ตามที่ต้องการมันอาจจะคุ้มค่าที่จะขอดึง pymongo เพื่อให้มันสอดคล้องกับไวยากรณ์ mongodb ทั่วไป แน่นอนว่าสิ่งนี้ใช้ไม่ได้เมื่อใช้ pymongo กับ python เวอร์ชันเก่า ..
thiezn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.