PyMongoでの.sortの使用


108

PyMongoで、次のように 'number'および 'date'フィールドでソートされたオブジェクトを取得しようとすると、

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

並べ替えクエリの何が問題になっていますか?

回答:


205

sort キーと方向のペアのリスト、つまり

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

これがリストでなければならない理由は、引数の順序が重要でありdict、Python <3.6ではsが順序付けされていないためです。


29
これがPythonのリストである理由は、sort()問題と辞書の引数の順序がPythonでは順序付けられていないためです。
アンドレ・ラズロ

@AndréLaszloはOrderedDict()を使用できますか?
zakdances 2013年

9
これにより、多くの研究を節約できました。Little MongoDB Bookは、ソートの例を誤解しています。
Dogukan Tufekci 2013

4
フィールドが1つだけの場合は、.sort( "_ id"、1)にすることができます
Haris Np

2
python3.6以降では、dictsが順序付けられているため、誰かがそれに賛成している場合は、pymongoにプルリクエストを送信して、一般的なmongodb構文と一致させることができます。もちろん、これではないでしょう仕事古いPythonのバージョンでpymongoを実行している...の
thiezn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.