MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

cadre d'agrégation mongodb - générer _id à partir de la fonction

Comme dans MongoDB 2.4, vous ne pouvez implémenter aucune fonction personnalisée dans le cadre d'agrégation. Si vous voulez $group par un ou plusieurs champs, vous devez les ajouter soit via des opérateurs d'agrégation et des expressions, soit via une mise à jour explicite () si vous ne souhaitez pas calculer à chaque fois.

À l'aide du cadre d'agrégation, vous pouvez ajouter un bucket calculé champ dans un $project étape du pipeline avec le $cond opérateur .

Voici un exemple de calcul de plages basé sur numberField qui peut ensuite être utilisé dans un $group pipeline pour 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" }
    }}
)