MongoDB通过嵌套数据对文档进行排序

时间:2013-03-10 03:18:45

标签: mongodb

考虑以下帖子设计:

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

1)我想选择我馆藏中的所有帖子,并按照评论最多的帖子排序。我假设因为.length变量总是通过javascript设置,可以使用它来排序,但我不知道如何或者是否真的更有效地将评论计数存储在帖子文档的字段中?

1.1)或者将评论计数存储在单独的文档中并不断更新它会更有意义吗?

2)在选择帖子时,是否可以将结果限制为仅返回帖子文档的最后3条评论而不是整个数组?

1 个答案:

答案 0 :(得分:0)

您需要使用aggregate命令

这应该会给你一个post _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/