Comme dans MongoDB 2.4, vous ne pouvez implémenter aucune fonction personnalisée dans le cadre d'agrégation. Si vous voulez $group
par un ou plusieurs champs, vous devez les ajouter soit via des opérateurs d'agrégation et des expressions, soit via une mise à jour explicite () si vous ne souhaitez pas calculer à chaque fois.
À l'aide du cadre d'agrégation, vous pouvez ajouter un bucket
calculé champ dans un $project
étape du pipeline avec le $cond
opérateur
.
Voici un exemple de calcul de plages basé sur numberField
qui peut ensuite être utilisé dans un $group
pipeline pour 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" }
}}
)