2016-06-07 2 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"}}) 

В вышеприведенном рамках агрегации. Вот мой ResultSet: -

{Фирма: "ABC" Год: "2010", costHead: "Mnfc", Всего: 5000}

Теперь результаты хороши для 3-го, кроме field - costHead: Mnfc. Я бы хотел заменить «Mnfc» на «Manufacturing».

Я попробовал несколько способов сделать это.

  1. Я попытался использовать (cond и if) в разделе группы, но это испортило группировку.

  2. Я пробовал использовать cond и if в проекте, но он просто ничего не производит, поскольку оператор $ проекции может проектировать только то, что передается с предыдущих уровней, а не генерировать его.

Из идей здесь. Любая помощь будет оценена.

С уважением Марио

ответ

1

Попробуйте еще раз использовать конд в $ проекции. Кажется, что это нормально для меня:

{$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

Смежные вопросы