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

Hitung persentase kemunculan secara efisien di MongoDB

Berikut adalah MapReduce sederhana yang akan melakukan apa yang Anda inginkan:

map = function() {
    for (var key in this.values){
        emit(key, {count:1, trues: (this.values[key] ? 1 : 0)});
    }
}

reduce = function(key, values){
    var out = values[0];
    for (var i=1; i < values.length; i++){
        out.count += values[i].count;
        out.trues += values[i].trues;
    }
    return out;
}

finalize = function(key, value){
    value.ratio = value.trues / value.count;
    return value;
}

db.runCommand({mapReduce:'collection',
               map:map,
               reduce:reduce,
               finalize:finalize,
               out:'counts'
               })

db.counts.findOne({_id:'alpha'})
{_id: 'alpha', value: {count: 100, trues: 52, ratio: 0.52}}

Anda juga dapat melakukan upsert seperti ini ketika Anda memasukkan ke dalam koleksi utama Anda yang akan memberi Anda tampilan real-time ke dalam data Anda:

for (var key in this.values){
    db.counts.update({_id:key},
                     {$inc:{count:1, trues: (this.values[key] ? 1 : 0)}},
                     true);
}

Bahkan, Anda bahkan bisa menggabungkan metode ini. Lakukan pekerjaan batch MapReduce satu kali untuk mengisi koleksi hitungan dan kemudian gunakan upserts untuk tetap memperbaruinya.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Memperbarui item dalam array dengan ID unik

  2. Kembalikan seluruh dokumen dari agregasi

  3. Bagaimana cara memasukkan hanya dokumen tersemat yang dipilih di mongoengine?

  4. Bagaimana cara menginstal php-mongo di CentOS 5.3?

  5. Bagaimana kita bisa mengimplementasikan Pagination untuk Mongodb Collection menggunakan mongoTemplate