Como no MongoDB 2.4, você não pode implementar nenhuma função personalizada no Aggregation Framework. Se você deseja
$group
por um ou mais campos, você precisa adicioná-los por meio de operadores e expressões de agregação ou por meio de um update() explícito se não quiser calcular cada vez. Usando o Aggregation Framework, você pode adicionar um
bucket
calculado campo em um $project
etapa de pipeline com o $cond
operador
. Aqui está um exemplo de cálculo de intervalos com base em
numberField
que pode ser usado em um $group
pipeline para sum/avg/etc:db.data.aggregate(
{ $project: {
numberfield: 1,
someotherfield: 1,
bucket: {
$cond: [ {$and: [ {$gte: ["$numberfield", 1]}, {$lte: ["$numberfield", 20]} ] }, '1-20', {
$cond: [ {$lt: ["$numberfield", 41]}, '21-40', {
$cond: [ {$lt: ["$numberfield", 61]}, '41-60', {
$cond: [ {$lt: ["$numberfield", 81]}, '61-80', {
$cond: [ {$lt: ["$numberfield", 101]}, '81-100', '100+' ]
}]}]}]}]
}
}},
{ $group: {
_id: "$bucket",
sum: { $sum: "$someotherfield" }
}}
)