sumar - relacionar dos colecciones en mongodb
Grupo MongoDB $ y formación de grupo explícita con columna calculada (1)
Estás en el camino correcto. En este caso, debe anidar operadores $cond
como este:
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}}})
resultados:
[ { _id: { Salary_Slab: ''Above 60K'' }, count: 3 },
{ _id: { Salary_Slab: ''30K-60K'' }, count: 1 },
{ _id: { Salary_Slab: ''Under 30K'' }, count: 2 } ]
Considere este código en SQL que forma grupos basados en un rango de salario:
;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
Quiero hacer esto en Mongo. Mi suposición es que la parte CTE me requerirá que primero emita {computed column}
a una colección temporal y luego haga un $group
en esa colección. Otra forma (y la que prefiero) podría ser usar $project
para proyectar {computed column}
como la primera secuencia en la canalización de agregación y luego realizar $group
.
db.UM.aggregate( {$project: { "computed_column": { //something with $cond}} },
{$group: {_id: {Salary_Slab:"$computed_column"}, count: {$sum:1}}}
);
Por favor, también revise una pregunta similar que hice antes:
Básicamente me da una salida pivotada. En esta situación, necesito salida no activada. Para comparar los dos, la respuesta a la otra pregunta creará tres columnas: {Menos de 30K, 30K-60K, Más de 60K} con una sola fila de conteos, mientras que necesito tres filas para Menos de 30K, 30K-60K y Más de 60K en una columna y sus respectivos conteos en la segunda columna.