PyMongo ile .sort kullanma


109

PyMongo ile, aşağıdaki gibi 'sayı' ve 'tarih' alanlarına göre sıralanmış nesneleri almaya çalıştığımda:

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

Bu hatayı alıyorum:

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

Sıralama sorgumun nesi var?

Yanıtlar:


206

sort anahtar yön çiftlerinin bir listesi olmalıdır, yani

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

Bunun bir liste olmasının nedeni, argümanların sıralanmasının önemli olması ve dictPython <3.6'da sıralanmamasıdır.


29
Bunun Python'da bir liste olmasının nedeni, argümanların sort()konulara ve diktlere göre sıralanmasının Python'da sıralanmamasıdır.
André Laszlo

@ AndréLaszlo, OrderedDict () kullanılabilir mi?
zakdances

9
Bu bana bir ton araştırma kazandırdı. Küçük MongoDB Kitabı, sıralama örneklerinde yanıltıcıdır.
Doğukan Tüfekçi

4
Yalnızca bir alansa, .sort ("_ id", 1) olabilir
Haris Np

2
python3.6'da + dicts sipariş edilir, bu yüzden eğer herhangi biri buna hazırsa, pymongo'ya onu genel mongodb sözdizimi ile aynı hizaya getirmek için bir çekme isteğine değer olabilir. Elbette bu, pymongo'yu eski python sürümlerinde çalıştırırken işe yaramaz ..
thiezn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.