2013-04-07 217 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)])} 
])