考虑一下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'
endfrom Tbl_UserMaster
)
select computedcolumn, COUNT(*)
from TableWithComputedColumngroup by computedcolumn
我想在蒙哥做这个…我的猜测是,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}}}
);
请再问一个我以前问过的类似问题:
Conditional $sum in MongoDB
它基本上给了我一个旋转输出。在这种情况下,我需要未激活的输出。为了比较二者,对另一个问题的回答将创建三列:{30K以下,30K-60K以上,60K以上}只有一行计数,而我需要在一列中为30K以下,30K-60K以上和60K以上的三行计数,以及在第二列中它们各自的计数。
最佳答案
你在正确的轨道上。在这种情况下,您需要像这样嵌套$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 } ]
关于mongodb - MongoDB $ group和计算列的显式组形成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14213300/