The docs似乎建议为了对aggregate
调用的结果进行排序,你应该指定一个这样的字典/对象:
db.users.aggregate(
{ $sort : { age : -1, posts: 1 } }
);
应该按age
排序,然后按posts
排序。
如果我想按posts
然后按age
排序,该怎么办?更改键的顺序似乎没有任何效果,可能是因为这是JS对象的属性。换句话说,排序似乎始终是根据键的词法顺序,这似乎是一个奇怪的设计选择......
我错过了什么吗?有没有办法指定要排序的有序键列表?
答案 0 :(得分:5)
来自the docs:
由于python词典不维护顺序,您应该使用
SON
或collections.OrderedDict
需要明确排序,例如 “$排序”
from bson.son import SON
db.users.aggregate([
{"$sort": SON([("posts", 1), ("age", -1)])}
])