MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

estrutura de agregação mongodb - gere _id da função


Como no MongoDB 2.4, você não pode implementar nenhuma função personalizada no Aggregation Framework. Se você deseja $group por um ou mais campos, você precisa adicioná-los por meio de operadores e expressões de agregação ou por meio de um update() explícito se não quiser calcular cada vez.

Usando o Aggregation Framework, você pode adicionar um bucket calculado campo em um $project etapa de pipeline com o $cond operador .

Aqui está um exemplo de cálculo de intervalos com base em numberField que pode ser usado em um $group pipeline para 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" }
    }}
)