2016-06-07 197 views
0

我需要修改值作为MongoDB中聚合框架的一部分。这里下面MongoDB聚合字段添加

是我的代码: -

db.coln.aggregate(
{$match: {"year" : "2010","companyName" :/ABC/}}, 
{$unwind:"$hierarchy"}, 
{$unwind:"$hierarchy.Details" }, 
{ 
    $group: 
    { "_id": 
     {"companyName": "$companyName", 
     "year": "$year", 
     "costHead": "$hierarchy.originalName"}, 
"total": { "$sum": "$hierarchy.Details.values" }} 
}, 
{$project: {_id:0, "Firm":"$_id.companyName", "Year":"$_id.year","costHead":"$_id.costHead", "Total":"$total"}}) 

在上面的聚合框架。这里是我的结果集: -

{公司: “ABC”,年份: “2010”,costHead: “MNFC”,总计:5000}

现在,结果是除了第三精字段 - costHead:Mnfc。我想用“制造”来代替“Mnfc”。

我试着这样做的多种方式。

  1. 我试着在组中使用(cond和if),但是这样会弄乱分组。

  2. 我尝试使用该链表,如果在项目,但它只是产生什么自$投影算只能什么项目从以前的水平传递,而不是生成它。

出于这里的想法。 任何帮助将被折衷。

问候 马里奥

回答

1

再次尝试在$投影使用COND。它似乎对我很好:

{$project: {_id:0, "Firm":"$_id.companyName", "Year":"$_id.year", 
    "costHead": { $cond: { if: { $eq: [ "$_id.costHead", "Mnfc"] }, then: "Manufacturing", else: "$_id.costHead" } }, 
    "Total":"$total" 
}} 
+0

感谢您的解决方案,但我想我应该明确指出这个问题本身。它比这大得多。毕竟 - 我试图通过使用聚合框架来实现ETl: - – Mario

+0

这工作,..谢谢 – Mario