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

mongodb aggregeringsramme - generer _id fra funktion

Som ved MongoDB 2.4 kan du ikke implementere nogen tilpassede funktioner i Aggregation Framework. Hvis du vil $group ved et eller flere felter, skal du tilføje dem enten gennem aggregeringsoperatorer og udtryk eller via en eksplicit update(), hvis du ikke ønsker at beregne hver gang.

Ved at bruge Aggregation Framework kan du tilføje en beregnet bucket felt i et $project pipeline-trin med $cond operatør .

Her er et eksempel på beregning af intervaller baseret på numberField som derefter kan bruges i en $group pipeline for 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" }
    }}
)



  1. konvertere millisekunder til dato i mongodb aggregeringspipeline for gruppe efter?

  2. Forbedring af MongoDB-tekstsøgningsydelse

  3. Begræns flere MongoDB-arraystørrelser

  4. Forespørg på strengtypen Dato i mongodb