sql >> Databáze >  >> NoSQL >> MongoDB

Řazení mongodb podle hodnotícího algoritmu reddit

Můžete použít 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 );

};

A spusťte mapReduce (bez redukce):

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

A samozřejmě za předpokladu, že vaše "sbírka" obsahuje pole pro ups , downs a date . Samozřejmě „žebříčky“ musí být vydávány způsobem, který je „jedinečný“, jinak potřebujete „reduktor“, aby výsledky seřadil.

Ale obecně řečeno by to mělo fungovat.



  1. mongo $součet složený při provádění $unwind a poté $group na více polích

  2. dotaz mongodb:$velikost s $gt vrací vždy 0

  3. flask 0.10 mongo pracující mimo kontext aplikace

  4. MongoDB a Docker prostřednictvím chyby autorizace docker-compose a neinicializace db