Это зависит от моей предыдущей проблемы. У меня есть коллекция под названием coln, где я храню поле, называемое обрешетками, в аббревиатурах: - mnfc для производства, sls для продаж.Данные Массирование с использованием агрегации
Моя совокупная структура должна считываться из этой коллекции и суммировать ее вместе с заменой этих аббревиатур их фактическими словами.
Смотрите код ниже: -
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": { $cond: { if: { $eq: [ "$_id.costHead", "Mnfc"] }, then: "Manufacturing", else: "$_id.costHead" } },
"Total":"$total"
}},
{$project: {_id:0, "Firm":"$_id.companyName", "Year":"$_id.year",
"costHead": { $cond: { if: { $eq: [ "$_id.costHead", "Sls"] }, then: "Sales", else: "$_id.costHead" } },
"Total":"$total"
}})
Проблема с этим кодом является то, что он возвращает
{} {}
Однако если убрать второй последний проекция: (см. ниже) -
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": { $cond: { if: { $eq: [ "$_id.costHead", "Mnfc"] }, then: "Manufacturing", else: "$_id.costHead" } },
"Total":"$total"
}})
Я получаю 1 документ, который возвращается - всего 1 документ. Проецирование фильтрует оставшиеся документы.
Однако фильтр не то, что я хочу. Это типичный сценарий ETL, где я хочу, чтобы аббревиатуры были заменены их полными формами, прежде чем загружать их в целевую коллекцию. Существует не менее нескольких сотен документов, которые необходимо объединить и преобразовать.
Если я применяю проекцию, она отфильтровывает другие 50 документов. Я бы хотел, чтобы все эти документы отображались.
У кого-нибудь есть идеи?
Вы могли бы предоставить пример документа? –