在PyMongo中使用.sort


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

我的排序查询出了什么问题?

Answers:


206

sort 应该是键方向对的列表,即

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

之所以必须是列表,是因为参数的顺序很重要,而dicts在Python <3.6中不排序


29
在Python中这是一个列表的原因是对sort()物料和字典的参数排序在Python中没有排序。
安德烈·拉斯洛(AndréLaszlo)2012年

@AndréLaszlo可以使用OrderedDict()吗?
zakdances

9
这节省了我大量的研究工作。《 MongoDB小书》在排序示例中产生了误导。
Dogukan Tufekci 2013年

4
如果仅是一个字段,则可以为.sort(“ _ id”,1)
Haris Np,

2
在python3.6 +中,命令是有序的,因此如果有人支持,可能值得向pymongo提出pull请求,使其与通用mongodb语法保持一致。当然,在较旧的python版本上运行pymongo时,这将无法正常工作。.–
thiezn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.