MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb-Aggregationsframework – _id aus Funktion generieren

Ab MongoDB 2.4 können Sie keine benutzerdefinierten Funktionen im Aggregation Framework implementieren. Wenn Sie $group möchten B. durch ein oder mehrere Felder, müssen Sie diese entweder durch Aggregationsoperatoren und -ausdrücke oder über ein explizites update() hinzufügen, wenn Sie nicht jedes Mal berechnen möchten.

Mit dem Aggregation Framework können Sie einen berechneten bucket hinzufügen Feld in einem $project Pipeline-Schritt mit $cond Betreiber .

Hier ist ein Beispiel für die Berechnung von Bereichen basierend auf numberField die dann in einer $group verwendet werden kann Pipeline für 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" }
    }}
)