0

したがって、データベース内のユーザーの投稿のカテゴリでランクと合計を取得する必要があります。たとえば、目的の出力は次のようになります。

Hi bob, here are your posts rankings:  
 'Breaking News' is ranked #10 of 203 in the 'news' category
 'Day at the Game' is ranked #24 of 67 in the 'sports' category".

そしてここにスキーマがあります

PostSchema = new Schema({
 {
  score:Number,
  categoryId: ObjectId,
  categoryName: String,
  title: String,
  username: String
 }
});

サンプル投稿

{ score: 12, 
  categoryId:"50cf7d2841d41f4f35000000", 
  categoryName:"sports", 
  title:"Day at the Game", 
  username:"bob"
}

マップリデュースでこれを試すことができると思いますが、集計コマンドを使用する方法はありますか?最も効率的なマップリデュース機能は何でしょうか?

4

1 に答える 1

0

これは難しいものです。

あなたがやろうとしている可能性が最も高いのは、このサイト(stackoverflow)のような多くのサイトがタグ(つまりmongodb)のトップアンサーと質問者を使って行うのと同じですが、ユーザーごとのレベルです。

ここで私が今意味したことの例を見ることができます:https ://stackoverflow.com/tags/mongodb/topusers

アグリゲーションフレームワークやマップリデュースの問題は、すべてのユーザーについて、そのカテゴリのすべてのレコードの統計を計算する必要があることです。これは203レコードでは問題ないかもしれませんが、おそらく数千に達し始めると、リアルタイムでこれを行うのは非常に困難になります。

そのため、通常は、他のサイト(このサイトを含む)と同様に、1日に1回、マップリデュースを介してこれを行う方が適切です。

グループ演算子の1つにない限り、各パイプ反復は前の反復(つまり増分数値)に関する定数を格納できないため、集約フレームワークでこれを行う方法がないことを認めなければなりません。

しかし、私がここで提起したポイントは、あなたが実際にここで正しい道を進んでいるかどうかを理解するのに役立つはずです。

于 2013-01-30T13:21:58.910 に答える