繁体   English   中英

MongoDB聚合-$ project中的动态字段路径

[英]MongoDB aggregation - dynamic field path in $project

我正在尝试将聚合$project阶段中的新字段的值设置为取决于另一个变量(不同日期的不同股票价格)的字段路径。

我可以使用getPrice全局帮助程序调用此字段路径以在模板中使用,但是找不到任何允许我从聚合中的许多字段路径中进行选择的MongoDB管道运算符(我看到$cond ,它仅允许两个选项)。 我还看到了如何计算新字段的值,但是我的用例不需要任何计算,该值已经存在于文档中。

Meteorpad更清楚地显示了我遇到的问题,但最相关的代码如下。 我可以在$ project dynamicPrice的值设置dynamicPrice 谢谢。

//Document being aggregated
{
  ticker: "AAPL",
  eps: "9.20",
  lastPrice: "119.03",
  closingPrices: [
    {date: "2015-12-03", close: "115.20"},
    {date: "2015-12-04", close: "119.03"}
  ]
}

//Function to find price for selected date, in /common.js, works for templates
    getPrice = function(companyId) {
        var company = Companies.findOne({_id:companyId});
        var valuation = Template.parentData(1);
        var valuationDate = valuation.valuationDate;
        var valuationPrice = 0;
        _.each(company.closingPrices, function(closingPrices) {
            if (closingPrices.date == valuationDate) valuationPrice = closingPrices.close;
        });
        return valuationPrice;
    };

//$project stage of aggregation
           {
              $project: {
                _id: 1,
                eps: 1,
                lastPrice: 1,
                dynamicPrice: getPrice
              }
            }

[编辑:减少文字以简化问题]

我可以使用$unwind解决这个问题。 全局帮助程序getPrice实际上与聚合无关。 在这里更新了Meteorpad

//Documents being aggregated
{
  ticker: "AAPL",
  eps: "9.20",
  lastPrice: "119.03",
  closingPrices: [
    {date: "2015-12-03", close: "115.20"},
    {date: "2015-12-04", close: "119.03"}
  ]
},
//...more documents

//Aggregation
var valuation = Valuations.findOne({_id: valuationId});
var valuationDate = valuation.valuationDate;

var pipeline = [
        {
          $unwind: "$closingPrices"
        },
        {
          $match: {
            "closingPrices.date": valuationDate
          }
        },
        {
          $project: {
            _id: 1,
            eps: 1,
            lastPrice: 1,
            dynamicPrice: "$closingPrices.close"
          }
        }
        //...$group stage with calculations

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM