Menggunakan .sort dengan PyMongo

109

Dengan PyMongo, ketika saya mencoba mengambil objek yang diurutkan berdasarkan bidang 'nomor' dan 'tanggal' seperti ini:

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

Saya mendapatkan kesalahan ini:

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

Apa yang salah dengan kueri pengurutan saya?

KennyPowers
sumber

Jawaban:

206

sort harus berupa daftar pasangan pengarahan kunci, yaitu

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

Alasan mengapa ini harus menjadi daftar adalah bahwa urutan argumen itu penting dan dicttidak dipesan dengan Python <3.6

georg
sumber
29
Alasan mengapa ini adalah daftar dengan Python adalah karena urutan argumen ke sort()matter dan dicts tidak diurutkan dengan Python.
André Laszlo
@ AndréLaszlo dapatkah OrderedDict () digunakan?
zakdances
9
Ini menghemat banyak penelitian. Buku Little MongoDB menyesatkan dalam contoh semacam.
Dogukan Tufekci
4
Jika hanya satu bidang, dapat .sort ("_ id", 1)
Haris Np
2
di python3.6 + dicts diperintahkan jadi jika ada yang mau, mungkin ada baiknya meminta pull ke pymongo untuk membawanya sejalan dengan sintaks mongodb generik. Tentu saja ini tidak akan berhasil saat menjalankan pymongo pada versi python yang lebih lama ..
thiezn