2013-03-10 63 views
1

考慮上崗以下設計排序文件:的MongoDB通過嵌套數據

{ 
title: string, 
body: string, 
comments: [ 
    {name: string, comment: string, ...}, 
    {name: string, comment: string, ...}, 
    ... 
] 
} 
... 

1)我想我的選擇集合中的所有帖子,並通過他們有最多評論的帖子進行排序。我假設自從.length變量總是通過javascript設置,可以使用它來排序,但我不知道如何或者如果它實際上是更有效的將評論計數存儲在發佈文檔中的字段?

1.1)或者更有意義的是將評論計數存儲在一個單獨的文檔中並不斷更新?

2)選擇帖子時,是否可以將結果限制爲只返回後期文檔的最後3個評論,而不是整個數組?

回答

0

您需要使用aggregate命令

這應該給你交_id的列表,通過以相反的順序數排序評論的數量。

您可以使用$ limit操作符來返回x頂部行。例如{ $limit : 5 }

db.posts.aggregate(
    { $unwind : "$comments" }, 
    { $group : { _id : "$_id" , number : { $sum : 1 } } }, 
    { $sort : { number : -1 } } 
); 

看看 http://docs.mongodb.org/manual/tutorial/aggregation-examples/