在MongoDB聚合框架中排序

时间:2013-04-07 15:43:12

标签: mongodb pymongo aggregation-framework

MongoDB的

The docs似乎建议为了对aggregate调用的结果进行排序,你应该指定一个这样的字典/对象:

db.users.aggregate(
    { $sort : { age : -1, posts: 1 } }
);

应该按age排序,然后按posts排序。

如果我想按posts然后按age排序,该怎么办?更改键的顺序似乎没有任何效果,可能是因为这是JS对象的属性。换句话说,排序似乎始终是根据键的词法顺序,这似乎是一个奇怪的设计选择......

我错过了什么吗?有没有办法指定要排序的有序键列表?

1 个答案:

答案 0 :(得分:5)

来自the docs

  

由于python词典不维护顺序,您应该使用SON或   collections.OrderedDict需要明确排序,例如   “$排序”

from bson.son import SON
db.users.aggregate([
    {"$sort": SON([("posts", 1), ("age", -1)])}
])