0
這跟隨我早期的問題。我有一個名爲coln的集合,我在那裏存儲一個名爲costheads的字段,縮寫爲: - 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個文檔。我希望顯示所有這些文件。
任何人有任何想法?
你能否提供一個示例文檔? –