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?

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.