Som ved MongoDB 2.4 kan du ikke implementere nogen tilpassede funktioner i Aggregation Framework. Hvis du vil $group
ved et eller flere felter, skal du tilføje dem enten gennem aggregeringsoperatorer og udtryk eller via en eksplicit update(), hvis du ikke ønsker at beregne hver gang.
Ved at bruge Aggregation Framework kan du tilføje en beregnet bucket
felt i et $project
pipeline-trin med $cond
operatør
.
Her er et eksempel på beregning af intervaller baseret på numberField
som derefter kan bruges i en $group
pipeline for 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" }
}}
)