MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Sortowanie mongodb według algorytmu rankingu reddit

Możesz użyć 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 );

};

I uruchom mapReduce (bez reduktora):

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

I oczywiście zakładając, że Twoja „kolekcja” ma pola ups , downs i date . Oczywiście „rankingi” muszą być emitowane w sposób „unikalny”, w przeciwnym razie potrzebujesz „reduktora”, aby uporządkować wyniki.

Ale ogólnie rzecz biorąc, to powinno wystarczyć.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak sortować z sumą 2 pól w MongoDB

  2. Nie można połączyć się z mongodb Błąd:nie można połączyć się z serwerem 127.0.0.1:27017 w src/mongo/shell/mongo.js:L112

  3. Błąd połączenia Mongodb przez docker w springboot

  4. Mongoose:CastError:Cast to ObjectId nie powiodło się dla wartości [object Object] w ścieżce _id

  5. (węzeł:3341) Ostrzeżenie o wycofaniu:mangusta:mpromise