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

MapReduce agregasi berdasarkan atribut yang terdapat di luar dokumen

Saya melakukan ini dengan membungkus MapReduce di beberapa javascript yang tersimpan.

function (query) {

  var one = db.people.findOne(query);
  var activity_ids = [];
  for (var k in one.activities){
    activity_ids.push(parseInt(k));
  }

  var activity_location_map = {};
  db.activities.find({id : {$in : activity_ids}}).forEach(function(a){
    activity_location_map[a.id] = a.location;
  });


  return db.people.mapReduce(
    function map(){
      for (var k in this.activities){
        emit({location : activity_location_map[k]} , { total: this.activities[k] });
        emit({location: activity_location_map[k]} , { total: this.activities[k] });
      }
    },
    function reduce(key, values){
      var reduced = {total: 0};
      values.forEach(function(value){
        reduced.total += value.total;
      });

      return reduced;
    },
    {out : {inline: true}, scope : { activity_location_map : activity_location_map }}
  ).results;
}

Mengganggu, dan berantakan, tapi berhasil, dan saya tidak bisa memikirkan yang lebih baik lagi.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Koneksi jarak jauh ke server MongoDB menggunakan Codeigniter

  2. Mongodb $lookup dengan dokumen bersarang

  3. Panjang nilai bidang string di mongoDB

  4. Asosiasi Mongoid Membuat Catatan (yang tidak diinginkan)

  5. Memperbarui catatan dengan luwak