1

考虑以下帖子设计:

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

1) 我想选择我收藏中的所有帖子,并按照评论最多的帖子对它们进行排序。我假设由于 .length 变量始终是通过 javascript 设置的,因此可以使用它进行排序,但我不知道如何将评论计数存储在 post 文档的字段中,或者实际上是否更有效?

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

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

4

1 回答 1

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/

于 2013-03-10T11:21:31.973 回答