Som i MongoDB 2.4 kan du inte implementera några anpassade funktioner i Aggregation Framework. Om du vill $group
av ett eller flera fält måste du lägga till dessa antingen genom aggregeringsoperatorer och uttryck eller via en explicit update() om du inte vill beräkna varje gång.
Med hjälp av Aggregation Framework kan du lägga till en beräknad bucket
fältet i ett $project
pipelinesteget med $cond
operatör
.
Här är ett exempel på beräkning av intervall baserat på numberField
som sedan kan användas i en $group
pipeline för summa/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" }
}}
)