2013-03-10 64 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/