2016-03-01 54 views
0

嘗試從評論集合中提取評分列表,然後對它們進行平均,以獲得板塊的總體平均評分。當我查看收視率變量的數據輸出時,我什麼也得不到,但是「undefined undefined undefined」。.pluck返回流星中的undefined

averageRating: function() { 
    var reviews = Reviews.findOne({plateId: this._id}); 
    var ratings = _.pluck(reviews, 'rating'); 
    var sum = ratings.reduce(function(pv, cv){return pv + cv;}, 0); 
    var avg = sum/ratings.length; 

    //Testing output 
    var test = ""; 
    var x; 
    for (x in reviews) { 
     text += reviews[x] + ','; 
    } 

    return test; 
} 

對不起,如果這是一個超級新手問題,但我已經在這個幾個小時,並無法弄清楚。

+0

在每次計算之後執行'console.log'來查看是否正在計算數據。 –

+0

這不是問題的計算部分。在我做任何數學之前,我會得到「未定義」。在上面的代碼中,我暫時繞過了數學部分,並輸出了我從.pluck收到的「undefined undefined undefined(etc)」。 – user2416293

+0

您的查詢最多返回單個文檔。文件是什麼樣的?在調用'pluck()'之前你得到了什麼? – MasterAM

回答

0

我想出了這個問題。如上所列var reviews被設置爲一個遊標,顯然.pluck不起作用。通過首先將光標轉換爲對象數組,我可以使用.pluck。所以更新後的代碼如下所示:

averageRating: function() { 
    var reviewsCursor = Reviews.find({plateId: this._id}); 
    //Converts cursor to an array of objects 
    var reviews = reviewsCursor.fetch(); 
    var ratings = _.pluck(reviews, 'rating'); 
    var sum = ratings.reduce(function(pv, cv){return pv + cv;}, 0); 
    var avg = (sum/ratings.length).toPrecision(2); 

    return avg; 

}