簡體   English   中英

從發布到助手的流星平均聚合

[英]Meteor Avg Aggregate from Publish to Helpers

我正在做一個流星項目,需要獲得平均評分。 我遇到過meteorhacks:aggregate包,但是無法實現。

發布:

Meteor.publish('supplierReviewsOverall', function(userid){

var pipeline = [
    {
        $match: {
            supplier: userid
        }
    },
    {
        $group: {
            _id: null,
            rate_overall : { $avg: "$rate_overall" },
            rate_timeliness : { $avg: "$rate_timeliness" },
            rate_quality : { $avg: "$rate_quality" },
            rate_value : { $avg: "$rate_value" }
        }
    }
]

return SupplierReviews.aggregate(pipeline);
});

我收到此錯誤:錯誤:發布函數返回了一個非游標數組。

然后,如何將值傳遞給幫助程序,以便可以將數據放入HTML中?

非常感謝!!!

基本答案:這是因為您需要在出版物中返回Cursor

您也有可能:

  1. 您可以使用聚合結果來重新創建游標,但會警告您,它將失去反應性:這意味着除非重新加載模板,否則您將不會獲得外部更新。 為此,您只需要包裝SupplierReviews.aggregate(pipeline); 放入var buffer = SupplierReviews.aggregate(pipeline); 並對其進行迭代以將數組的每個項目添加到發布游標中:

    _(buffer).each(function(item){ self.added ('SupplierReviews', item._id, item); }; self.ready();

  2. 我個人最喜歡的:您不需要聚合(和松散的反應性來實現average操作。您可以使用簡單的Collection.find()查詢並使用巧妙的cursor.Observe組合來擴展/減少/修改它。 cursor.Observe和有條件的修改)看看這個答案,它對我有用(我需要一個總和,但您可以輕松地將其調整為平均值): https : //stackoverflow.com/a/30813050/3793161
  3. 如果您打算擁有多台服務器,請注意每台服務器都必須observe ,否則可能導致不必要的負載。 因此,我的第三個解決方案是使用集合掛鈎或方法來為您需要的每個值更新其他字段average 請參閱@David Weldon對此的答案: https ://stackoverflow.com/a/31190896/3793161

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM