在SQL中考虑这个基于一系列薪水形成组的代码:
;With TableWithComputedColumn as
(
select
computedcolumn =
Case
when Salary<30000 then 'Under 30K'
when Salary>30000 and Salary<60000 then '30K-60K'
else 'Above 60K'
end
from Tbl_UserMaster
)
select computedcolumn, COUNT(*)
from TableWithComputedColumn
group by computedcolumn
我想在Mongo中这样做。我的猜测是CTE部分要求我先将{computed column}
输出到临时集合,然后对该集合执行$group
。另一种方式(也是我更喜欢的方式)可能是使用$project
来投射{computed column}
作为第一个流
聚合管道,然后执行$group
。
db.UM.aggregate(
{$project: { "computed_column": { //something with $cond}} },
{$group: {_id: {Salary_Slab:"$computed_column"}, count: {$sum:1}}}
);
请同样回答我之前提出的类似问题:
它基本上给了我一个旋转输出。在这种情况下,我需要不透明的输出。为了比较两者,另一个问题的答案将创建三列:{30K以下,30K-60K,60K以上},有一行计数,而我需要三行,分别为30K,30K-60K和60K以上在一栏中,以及在第二栏中各自的计数。
答案 0 :(得分:3)
你走在正确的轨道上。在这种情况下,您需要嵌套$cond
运算符,如下所示:
db.UM.aggregate(
{ $project: {
computed_column: {$cond: [{$gt: ['$Salary', 30000]},
{$cond: [{$gt: ['$Salary', 60000]}, 'Above 60K', '30K-60K']},
'Under 30K']}
}},
{ $group: {_id: {Salary_Slab: '$computed_column'}, count: {$sum: 1}}})
结果:
[ { _id: { Salary_Slab: 'Above 60K' }, count: 3 },
{ _id: { Salary_Slab: '30K-60K' }, count: 1 },
{ _id: { Salary_Slab: 'Under 30K' }, count: 2 } ]