0

このようなコレクション「質問」

{
     _id:
     question:
     time:
     click_nums:
     answers: [
        {},
        {},
        ...
     ]
}

この質問を次のようにランク付けして、トップ 5 を取得したいと思います。

 rank_condition = (now_time - time)/24*(click_nums*0.2+nums_of_answers*0.8)

どうすればこれを実現できますか、私はMongodbの初心者です..

特別:PHPで実現するために!!!

4

1 に答える 1

2

MongoDB は (現在) フィールドの値でのみソートできます。複雑な式はサポートしていません (SQL のORDER BYなど)。ここでは、新しい Aggregation Framework が確かに役立ちます。

次の 3 つのオプションがあります。

  1. アプリケーションでランク付けします。これは実装が最も簡単です。

  2. ランキングの位置を事前に計算します (ランクを計算して更新する定期的なバックグラウンド ジョブを実行します)。これはクエリを実行する最も効率的な方法です (少し古いデータが得られる可能性があります)。

  3. Aggregation Frameworkを使用します (2.2 および現在の不安定版で利用可能)。これは「最もクールな」方法です。(新しいおもちゃで遊べます :) )

于 2012-04-09T09:08:13.780 に答える