MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

framework di aggregazione mongodb:genera _id dalla funzione

Come in MongoDB 2.4, non è possibile implementare alcuna funzione personalizzata in Aggregation Framework. Se vuoi $group per uno o più campi, è necessario aggiungerli tramite operatori ed espressioni di aggregazione o tramite un aggiornamento esplicito() se non si desidera calcolare ogni volta.

Usando Aggregation Framework puoi aggiungere un bucket calcolato campo in un $project passaggio della pipeline con $cond operatore .

Ecco un esempio di calcolo degli intervalli in base a numberField che può quindi essere utilizzato in un $group pipeline per 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" }
    }}
)