Както при MongoDB 2.4, не можете да внедрите персонализирани функции в Aggregation Framework. Ако искате да $group
чрез едно или повече полета, трябва да ги добавите или чрез оператори и изрази за агрегиране, или чрез изричен update(), ако не искате да изчислявате всеки път.
С помощта на Aggregation Framework можете да добавите изчислена bucket
поле в $project
стъпка на конвейера с $cond
оператор
.
Ето пример за изчисляване на диапазони въз основа на numberField
които след това могат да се използват в $group
конвейер за 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" }
}}
)