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个文档。我希望显示所有这些文件。
任何人有任何想法?
你能否提供一个示例文档? –