MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Mengurutkan mongodb berdasarkan algoritme peringkat reddit

Anda dapat menggunakan 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 );

};

Dan jalankan mapReduce (tanpa peredam):

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

Dan tentu saja menganggap bahwa "koleksi" Anda memiliki bidang untuk ups , downs dan date . Tentu saja "peringkat" perlu dipancarkan dengan cara yang "unik" jika tidak, Anda memerlukan "peredam" untuk memilah hasil.

Tapi secara umum itu harus berhasil.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Eksekusi kueri Mongodb memakan waktu terlalu lama

  2. Kueri dinamis di MongoDB dan Node.js

  3. Permintaan nomor panjang Java Mongodb

  4. Mengevaluasi kompleksitas kueri agregasi MongoDB:biaya $lookup

  5. Meteor:kode keluar mongo tak terduga null. Memulai ulang. Apa ini?