sql >> データベース >  >> NoSQL >> MongoDB

redditランキングアルゴリズムによるmongodbの並べ替え

    mapReduceを使用できます:

    var mapper = function() {
    
        function hot(ups,downs,date){
            var score = ups - downs;
            var order = log10(Math.max(Math.abs(score), 1));
            var sign = score>0 ? 1 : score<0 ? -1 : 0;
            var seconds = epochSeconds(date) - 1134028003;
            var product = order + sign * seconds / 45000;
            return Math.round(product*10000000)/10000000;
        }
    
       function log10(val){
          return Math.log(val) / Math.LN10;
       }
    
       function epochSeconds(d){
           return (d.getTime() - new Date(1970,1,1).getTime())/1000;
       }
    
       emit( hot(this.ups, this.downs, this.date), this );
    
    };
    

    そして、mapReduceを実行します(レデューサーなしで):

    db.collection.mapReduce(
        mapper,
        function(){},
        {
            "out": { "inline": 1 }
        }
    )
    

    そしてもちろん、あなたの「コレクション」にはupsのフィールドがあると仮定します 、downs およびdate 。もちろん、「ランキング」は「ユニーク」な方法で発行する必要があります。そうでない場合は、結果を分類するために「レデューサー」が必要です。

    しかし、一般的に言えば、それでうまくいくはずです。



    1. MongoDBトランザクション?

    2. NodeJSを使用してブラウザにGETリクエストの結果を表示する

    3. Tomcatを使用したMongoDBJavaDriverデータベース接続プール

    4. phpmongodbはコレクション内のn番目のエントリを検索します