2013-04-07 128 views
1

The docs MongoDB的排序似乎表明,为了一个aggregate的结果进行排序叫你应该指定一个像这样的词典/对象:MongoDB中的聚合框架

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

这应该由age和排序然后通过posts

如果我想按posts再按age排序,该怎么办?改变键的顺序似乎没有效果,可能是因为这是一个JS对象的属性。换句话说,排序似乎总是按照按键的词汇顺序,这似乎相当奇怪作为设计选择...

我错过了什么吗?有没有办法指定一个订购键排序?

+0

SONcollections.OrderedDict看起来工作在壳里。你是在shell还是在node.js程序中执行此操作? – JohnnyHK 2013-04-07 16:10:05

+0

使用标准驱动程序在python中执行此操作。 – 2013-04-07 16:12:08

+0

我认为这只是一个更复杂的例子的一部分,但是这个查询可以用db.users.find()来完成。sort({age:-1,posts:1})''' – xeraa 2013-04-08 12:46:17

回答

3

the docs

由于Python字典不维持秩序,你应该使用在需要明确的排序如 “$排序”

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