0

私がやろうとしているのは、投稿数が最も多いユーザーを見つけることです。UserPostMongoid::Document

に相当するActiveRecordはUser.group(posts)機能しません。ユーザーの投稿数にアクセスできます@user.posts.count

すべてのユーザーの配列を投稿数で並べ替えずに、ほとんどの投稿を持つユーザーを見つけるにはどうすればよいですか?

4

2 に答える 2

2

:allを使用すると、Mongoidコレクションは配列関数に応答します。

User.all.max_by {|user| user.posts.count}

これにより、すべてのユーザーが繰り返され、投稿数が最も多いユーザーが検索されます。

于 2012-08-21T07:24:05.273 に答える
0

データベースがすべての作業を行うSQLに似た方法が必要な場合は、1つではありません。MongoDBには結合もSQLもありません。データモデルをそのままにしておくと、すべてのユーザーを反復処理し、それらの投稿数を取得してから並べ替えることしかできません。

N+1ただし、投稿数をユーザードキュメントのフィールドに保存し、実際に保持することで、このクエリパターンを排除できます(新しい投稿が追加されたときにインクリメントするなど)。これは「カウンターキャッシュ」と呼ばれ、これを行うのプラグインがいくつかあります。

そのキャッシュ列を取得したら、問題なく並べ替えることができます。

于 2012-08-21T07:28:43.437 に答える