使用 PyMongo 的 .sort 方法
问题的原因是在使用PyMongo的.sort()方法时,传入的参数应该是一个键-方向对的列表,而不是一个字典。这是因为在Python的版本低于3.6时,字典是无序的,参数的顺序很重要。
解决这个问题的方法是将需要排序的键-方向对放入一个列表中作为.sort()方法的参数。如果只需要对一个字段进行排序,可以使用.sort("_id", 1)的方式。
在Python中,不能使用OrderedDict()来解决这个问题,因为OrderedDict()不是types.ListType的实例。
这个问题的解决方法对我帮助很大,因为《The Little MongoDB Book》中的排序示例是误导性的。
虽然有点可惜的是,MongoDB的官方文档示例使用字典而不是键-方向对的列表,但这样做对于PyMongo来说是有道理的。JSON实际上是有序字典(作为字符串),所以PyMongo的错误信息可能需要更清晰地说明需要改变的部分。
如果在Python3.6及以上的版本中,可以使用字典来解决这个问题,这样就可以向PyMongo提出一个拉取请求,使其与通用的MongoDB语法保持一致。当然,在旧版本的Python上运行PyMongo时,这种方法就不适用了。
如果想要对单个字段进行排序,还可以使用.sort('{}'.format('created_on'), 1 if sort_type == 'asc' else -1)的方式。