使用 Meteor 模板助手返回的值进行其他计算 [解决聚合问题]

Using values returned by Meteor template helpers for other calculations [SOLVING WITH AGGREGATION]

我无法理解如何 运行 在 Meteor 应用程序中进行一些简单的计算。

下面的帮手return三个值(分子、分母和两者相除的结果)。前两个值当前来自一个集合(最终将来自 API 提要)并且依赖于来自不同集合的两个值(使用 Template.parentData 调用)。第三个值没有保存到数据库中。通过循环重复此序列以在 table.

中显示三个值
Template.ValuationTable.helpers({
    selections: function () {
        var selected = this.valuationSelections;
        return Companies.find({ticker: {$in: selected}})
    },
    valuationNum: function() {
        var valuationMetric = Template.parentData(1).valuationMetric;
        switch (valuationMetric) {
            case "EV/Revenue":
                return this.enterpriseValue.toFixed(1);
                break;
            case "EV/EBITDA":
                return this.enterpriseValue.toFixed(1);
                break;
            default:
                return "";
        }
    },
    valuationDen: function() {
        var valuationMetric = Template.parentData(1).valuationMetric;
        var valuationPeriod = Template.parentData(1).valuationPeriod;
        switch (valuationMetric) {
            case "EV/Revenue":
                switch (valuationPeriod) {
                    case "LTM":
                        return this.ltm.revenue.toFixed(1);
                        break;
                    case "FY1":
                        return this.fy1.revenue.toFixed(1);
                        break;
                    case "FY2":
                        return this.fy2.revenue.toFixed(1);
                        break;
                }
                break;
            case "EV/EBITDA":
                switch (valuationPeriod) {
                    case "LTM":
                        return this.ltm.ebitda.toFixed(1);
                        break;
                    case "FY1":
                        return this.fy1.ebitda.toFixed(1);
                        break;
                    case "FY2":
                        return this.fy2.ebitda.toFixed(1);
                        break;
                }
                break;
            default:
                return "";
        }
    }
});

Template.registerHelper('divide', function(a, b) {
    return (a / b).toFixed(1);
    });

<template name="ValuationTable">
    {{#each selections}}
        <tr>
            <td>
                <a>${{valuationNum}}</a>
            </td>
            <td>
                <a>${{valuationDen}}</a>
            </td>
            <td>
                <a>{{divide valuationNum valuationDen}}x</a>
            </td>
        </tr>
    {{/each}}
</template>

然后我需要计算第三个值系列的平均值和中值,既要显示在页面上又要用作 D3 的数据点。我知道我需要数组中的这些值来计算平均值和中位数,但我不知道如何从辅助结果中 "get" 它们。

首先,我是否应该在对象中构建开关(也许在订阅中?)并将其传递给助手?如果是这样,将不胜感激。

其次,如何获取第三个值添加到数组中?我可以直接从助手访问它吗?

提前致谢,抱歉,如果这是两个不同的问题,但我认为它们密切相关。

编辑:

我意识到,根据 Michel 对 meteorhacks:aggregate 的建议,我的想法是错误的,需要的是聚合,而不是助手。

在处理单个文档的辅助函数中执行聚合操作是不切实际的。您可能会找到诸如 meteorhacks:aggregate 之类的包来实现聚合功能。

为什么不切实际?对于初学者来说,由于反应性,任何值甚至文档数量都可能随时发生变化。您无法真正执行聚合 ,因为文档显示 在具有一个文档范围的函数中。