2016-04-22 14 views
0

私はMongoDBコレクション(Mongooseを使用)からコメントを取得し、集計パイプラインを使用してコメント数と平均を計算しようとしています。しかし、最初の$一致が何も返されないとき、スクリプトは '未定義の' avg 'のエラーを'読み込めません 'というエラーでクラッシュします。MongoDB/Mongoose集計、ステージ結果が未定義

var q = Comment.aggregate([ 
    { $match: { 
     _post: this, 
     rating: { $gt: 0 }, 
    }}, 
    { $group: { 
     _id: null, 
     avg: { $avg: "$rating" }, 
     count: { $sum: 1 } 
    }} 
]); 

q.exec(function(err, result) { 
    cb(err, result[0].avg, result[0].count); 
}); 
私は結果がすべてのコメントの正確な平均とカウントを含む_POSTの$試合を残して

が、$試合は何も返さないとき、それは単にエラーをスローします。..どのように修正するには?

+0

なぜ「_post:this」が必要ですか?集約パイプラインは順番に機能します。 '$ group'は前回のクエリの後にカーソルと共に動作します(存在する場合)。 –

+0

コードスニペットはPost Mongooseオブジェクトのインスタンスメソッドの一部です。 _post:これは、特定の投稿に属するコメントだけを取得するためにオブジェクト自体を参照します。 $ groupは実際に前のステージからの空の結果の後に動作しますが、私は間違った場所を見ていました(下記の答えを参照)。 – Keugels

答えて

0

私は間違った場所を見ていました。エラーメッセージは、クエリの 'avg'ではなく、コールバック関数のresult.avgを参照していました。投稿する直前に、コールバック関数のパラメータをresult [0] .avgに変更しましたが、エラーメッセージは未定義から '0'を読み取ることができませんでした。

間違った場所で盲目的になっています..投稿が早すぎる..

関連する問題