与 MongoDB 2.4 一样,您无法在聚合框架中实现任何自定义函数。如果你想$group
如果您不想每次都计算,则需要通过聚合运算符和表达式或通过显式 update() 添加这些字段。
使用聚合框架,您可以添加计算的bucket
场在一个$project
管道步骤与$cond操作员 http://docs.mongodb.org/manual/reference/operator/aggregation/cond/.
这是基于计算范围的示例numberField
然后可以用于$group
sum/avg/等的管道:
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" }
}}
)