sql >> Databasteknik >  >> NoSQL >> MongoDB

Kan MongoDB aggregeringsramverket $group returnera en rad värden?

Det är möjligt att kombinera två fält till en rad värden med Aggregation Framework, men det är definitivt inte så enkelt som det skulle kunna vara (åtminstone som i MongoDB 2.2.0).

Här är ett exempel:

db.metrics.aggregate(

    // Find matching documents first (can take advantage of index)
    { $match : {
        'array_serial' : array, 
        'port_name' : { $in : ports},
        'datetime' : { $gte : from, $lte : to}
    }},

    // Project desired fields and add an extra $index for # of array elements
    { $project: {
        port_name: 1,
        datetime: 1,
        metric: 1,
        index: { $const:[0,1] }
    }},

    // Split into document stream based on $index
    { $unwind: '$index' },

    // Re-group data using conditional to create array [$datetime, $metric]
    { $group: {
        _id: { id: '$_id', port_name: '$port_name' },
        data: {
            $push: { $cond:[ {$eq:['$index', 0]}, '$datetime', '$metric'] }
        },
    }},

    // Sort results
    { $sort: { _id:1 } },

    // Final group by port_name with data array and count
    { $group: {
        _id: '$_id.port_name',
        data: { $push: '$data' },
        count: { $sum: 1 }
    }}
)


  1. Inget svar efter anslutning från selleri till redis via ssl

  2. Hadoop Map/Reduce vs inbyggd Map/Reduce

  3. Node.js, Mongo hitta och returnera data

  4. Välj stränglängd i mongodb