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. spring-data-mongodbがmongodb認証例外を与える

    2. マングース(Nodejs)の複数化ルールとは何ですか?

    3. バイナリデータをbase64(Gridfs-stream)に変更するのに行き詰まりました

    4. PHPを使用したMongoDB4.0でのトランザクションの例