MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Сортиране на mongodb чрез алгоритъм за класиране на reddit

Е, можете да използвате 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Какво прави опцията за конфигурация --bindip в mongodb?

  2. MongoDB 3.6.2 2008R2 Plus не се инсталира

  3. Да се ​​съхранява _Id като обект или низ в MongoDB?

  4. Как да съхранявате полето за дата като ISODate() с помощта на jackson в MongoDb

  5. mongodb текстово търсене с помощта на няколко езика