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

MapReduce агрегиране въз основа на атрибути, съдържащи се извън документа

Направих това, като опаковах MapReduce в някакъв съхранен javascript.

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;
}

Досадно и объркващо, но работи и не мога да се сетя за нещо по-добро.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как Spring Data знае кой магазин да подкрепи хранилище, ако се използват множество модули?

  2. MongoDB:Условен избор от една колекция въз основа на друга колекция

  3. намерете в BSON документи с MongoDB C++ драйвер

  4. Преглед на MongoDB Atlas:Част втора

  5. mongodb - получава най-високата стойност на сума, групирана по поле