2011-09-30 71 views
8

我有一個文件,它看起來像:MongoDB的排序子文檔數

{ 
     "_id" : ObjectId("4e84f78b26d2046d5d00b5b2"), 
     "parent_id" : 0, 
     "ratings" : [ 
       "20716", 
       "78167" 
     ], 
     "text" : "test" 
} 

是否有可能通過「評分」的次數進行排序?做這樣的事情:

db.comments.find().sort({rating.count(): -1})

拋出一個錯誤:

SyntaxError: missing : after property id (shell):0

回答

8

這是不能直接使用的MongoDB [1]

一個解決方案,如果你經常使用此查詢,是遞增和遞減每次修改評分數組並對該字段進行排序時,字段「計數」。

你的文件看起來像:

{ 
    "_id" : ObjectId("4e84f78b26d2046d5d00b5b2"), 
    "parent_id" : 0, 
    "ratings" : [ 
      "20716", 
      "78167" 
    ], 
    count : 2 
    "text" : "test" 
} 

和你

db.comments.find().sort({count: -1}) 
+0

是的,這是目前唯一的選擇,這是他們設計中的10gen狀態幻燈片 –

+0

和新的聚合框架,它仍然是唯一的選擇? – basilboli

16

查詢有明顯的答案了,但我想我補充一點,這是可以做到使用聚合框架:

db.comments.aggregate([ 
    { $unwind: "$ratings" }, 
    { $group : { _id : { parent_id: "$parent_id", text: "$text" }, 
       ratingsCount : { $sum : 1 } } }, 
    { $sort : { ratingsCount : -1 } } 
])