在MongoDB的聚合框架中排序

Ass*_*vie 3 mongodb pymongo aggregation-framework

MongoDB 的文档似乎建议,为了对aggregate调用的结果进行排序,您应该指定一个字典/对象,如下所示:

db.users.aggregate(
    { $sort : { age : -1, posts: 1 } }
);
Run Code Online (Sandbox Code Playgroud)

这应该按顺序排序age然后按posts.

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

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

Joh*_*yHK 5

来自文档:

由于python词典不维护顺序,你应该使用SONcollections.OrderedDict需要显式排序,例如"$ sort"

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