sql >> Database >  >> NoSQL >> MongoDB

Mongodb sorteren op reddit-rangschikkingsalgoritme

Nou, je kunt mapReduce gebruiken:

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 );

};

En voer de mapReduce uit (zonder verloopstuk):

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

En natuurlijk ervan uitgaande dat uw "verzameling" de velden heeft voor ups , downs en date . Natuurlijk moeten de "ranglijsten" worden weergegeven op een manier die "uniek" is, anders heb je een "verkleiner" nodig om de resultaten te sorteren.

Maar over het algemeen zou dat het werk moeten doen.



  1. int naar zwevende conversie in Mongo find

  2. Waarom Mongo-query voor null-filters in FETCH na het uitvoeren van IXSCAN

  3. Converteer datetime-indeling van webservice naar een tekenreeks

  4. oauth2-server-laravel configureren met laravel-mongodb