![](/img/trans.png)
[英]MongoDB Aggregation Framework : Using dynamic javascript variables in Project “key” field
[英]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.