sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb aggregeringsramverk - generera _id från funktion

Som i MongoDB 2.4 kan du inte implementera några anpassade funktioner i Aggregation Framework. Om du vill $group av ett eller flera fält måste du lägga till dessa antingen genom aggregeringsoperatorer och uttryck eller via en explicit update() om du inte vill beräkna varje gång.

Med hjälp av Aggregation Framework kan du lägga till en beräknad bucket fältet i ett $project pipelinesteget med $cond operatör .

Här är ett exempel på beräkning av intervall baserat på numberField som sedan kan användas i en $group pipeline för summa/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. MongoDB Java-drivrutin:autoConnectRetry

  2. Hur fixar jag UploadNotAllowed-felet i Flask när ingen fil laddas upp?

  3. Varför har Mongoose både scheman och modeller?

  4. mongodb hur frågar man med nand-operatören?