2013-11-22 25 views
0

某些記錄我已經有了一些基本排序MongoDB中去的那種,:MongoDB的排序把最後基於查找

db.collection.find().sort({ age: -1 }); 

但是,如果我想要的東西創造出更先進的排序類型?

舉例來說,這樣的數據:

[ 
    {name :'obj1', 
    category:'shoes'}, 
    {name :'obj2', 
    category:'hats'}, 
    {name :'obj3', 
    category:'jumpers'}, 
    {name :'obj4', 
    category:'shoes'} 
] 

說我有這個數據,我想對它進行排序,以便與category:'shoes'什麼最後出現。這是可能的,它是如何實現的?

+0

你的意思是'「鞋」'將永遠是最後的,即使有,通常會具有後排序的'category'?比如說,「網球」?因爲,如果你是,我會添加一個答案,說它在一個查詢中對數據庫不實用。 – WiredPrairie

回答

0

我不知道我跟隨。在你上面的例子,你可以只排序

類別
db.collection.find().sort({ category : 1 }) 

那應該把鞋最後。我不確定這是不是你的意思。如果我誤解了,請告訴我。

+0

哈,不幸的是問題比這個更復雜一點。你的回答是正確的,因爲它真的把鞋子放在最後,因爲它是按字母順序排列的,但這不是我想要達到的。我希望能夠根據我的選擇將***任何***類別放在最後。 – Jascination

0

您應該如下使用聚合。假定數組在名爲store的字段中,並且有兩個名爲name和age的字段。因此,一個典型的記錄將是

{"name" : "a", "age" : 41, 
    "store" : [ 
     {name :'obj1', 
     category:'shoes'}, 
     {name :'obj2', 
     category:'hats'}, 
     {name :'obj3', 
     category:'jumpers'}, 
     {name :'obj4', 
     category:'shoes'} 
     ] 
} 

db.user.aggregate(
    {$unwind:"$store"}, 
    {$sort:{"store.category":1}}, 
    {$group:{_id:{"name":"$name", "age":"$age"}, store:{$push:"$store"}}} 
)