1

投稿の次の設計を検討します。

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

1) コレクション内のすべての投稿を選択し、コメントが最も多い投稿で並べ替えたいと思います。.length 変数は常に JavaScript を介して設定されるため、これを使用してソートすることは可能ですが、投稿ドキュメントのフィールドにコメント数を格納する方が実際に効率的かどうかはわかりませんか?

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 に答える