MongoDB 2.4と同様に、AggregationFrameworkにカスタム関数を実装することはできません。 $group
が必要な場合 1つ以上のフィールドで、集計演算子と式を使用するか、毎回計算したくない場合は明示的な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" }
}}
)