2016-05-11 8 views
0

で数える私はグループ集計を使用してデータ収集にコードを作成しているが、今、私は、プロセス・カウント・グループは、正しい結果を与えることができないという問題があります。私はどこに問題があるのか​​分からない。流星:グループ集計

このコードの結果は、Resultのようになります。

//js 

Template.laporankategori.helpers({ 
    profilcount: function() { 
    var subs = {}; 
    Profil.find().forEach(function(e) { 
     if (subs[e.kategori] == null) 
     subs[e.kategori] = 0; 
     subs[e.kategori] += e.amount; 
    }); 

    var result = []; 
    _.each(subs, function(value, key) { 
     result.push({kategori: key, amount: value}); 
    }); 

    return result; 
    } 
}); 



//publish 
Meteor.publish("profilcount",function(args) { 
    var sub = this; 

    var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db; 

    var pipeline = [ 
     { "$group": { 
     "_id": "$kategori", 
     count:{$sum:amount} 
     }} 
     ]; 

    db.collection("profil").aggregate(  
     pipeline, 

     Meteor.bindEnvironment(
      function(err, result) { 
       _.each(result, function(e) { 
        sub.added("profil", Random.id(), { 
        kategori: kategori._id, 
        amount: kategori.count 
        }); 
       }); 
       sub.ready(); 
      }, 
      function(error) { 
       Meteor._debug("Error doing aggregation: " + error); 
      } 
     ) 
    ); 
}); 

// HTML {{#each profilcount}} <tr> <td>{{kategori}}</td> <td>{{ amount}}</td>
</tr> {{/each}}

私はこのような結果をしたい:私のコードがあります。 Result

+0

集計(オブジェクト自体)の結果は何ですか? '$ group'ステージで' count:{$ sum: '$ amount'} 'を意味しませんでしたか? – MasterAM

+0

はい、私はそれを意味するが、このコードの結果は何も意味しない。 – nurul

+0

これを少し分解して問題を特定してください。集約自体の結果を確認し、それらがあなたの期待に合っていることを確認してください。次に、クライアントがコレクションから適切なデータを取得していることを確認し、最後にプレゼンテーションロジックが機能することを確認します。今は、物事がうまくいかない複数の場所があります。 – MasterAM

答えて

0

私はこれを他の解決策として、凝集体を使用しません。それがあなたを助けるかどうかの場合にのみ。

// JS

Template.laporankategori.helpers({ 
profilcount() { 
    var result = []; 
    var categs = []; 
    profil.find().forEach(function(profil) { 
    if(categs.indexOf(profil.kategori) > -1) { 
    for (var i = 0; i < result.length; i++) { 
     var res = result[i]; 
     var count = res.count + 1; 
     var amount = res.amount + profil.amount; 
     result[i].count = count; 
     result[i].amount = amount; 
     break; 
    } 
    } else { 
    result.push({ 
     name: profil.kategori, 
     amount : profil.amount, 
     count : 1 
    }); 
    categs.push(profil.kategori); 
    } 
    }); 
    return result; 
} 
}); 

Meteor.publish("profil",function(args) { 
    return profil.find({},{fields: {amount: 1, kategori:1}}); 
}); 

// HTML

<table> 
    <thead> 
     <tr> 
      <td> Kategori </td> 
      <td> Total Amount</td> 
      <td> Count </td> 
     </tr> 
    </thead> 
    <tbody> 
    {{#each profilcount}} 
     <tr> 
       <td>{{ name }}</td> 
       <td>{{ amount }}</td> 
       <td>{{ count }}</td> 
      </tr> 
    {{/each}} 
    </tbody> 
</table>