MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Sắp xếp mongodb theo thuật toán xếp hạng reddit

Bạn có thể sử dụng 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 );

};

Và chạy mapReduce (không có bộ giảm tốc):

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

Và tất nhiên, giả sử rằng "bộ sưu tập" của bạn có các trường cho ups , downsdate . Tất nhiên, "bảng xếp hạng" cần được phát ra theo cách "độc nhất", nếu không bạn cần một "bộ giảm tốc" để sắp xếp kết quả.

Nhưng nói chung, điều đó sẽ làm được việc.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để kết xuất toàn bộ cơ sở dữ liệu MongoDB dưới dạng text / json?

  2. java.lang.Incomp Tương thíchClassChangeError:Triển khai lớp Mongo

  3. Làm thế nào để chỉ trả lại giá trị trong MongoDB

  4. Sắp xếp mảng đối tượng lồng nhau

  5. Xác thực chiến lược địa phương của hộ chiếu dường như chỉ hoạt động trên máy chủ cục bộ với phiên bản MongoDB được chia sẻ