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

Kan MongoDB aggregeringsramme $group returnere en række værdier?

Det er muligt at kombinere to felter til en række værdier med Aggregation Framework, men det er bestemt ikke så ligetil, som det kunne være (i hvert fald som ved MongoDB 2.2.0).

Her er et eksempel:

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. Vælg dokumenter, hvor alle værdier i et matrixfelt findes i et andet matrix

  2. Kan jeg lave en tekstforespørgsel med mongodb c#-driveren

  3. Redis:Amazon EC2 vs Elasticache

  4. Hvordan udføres opdateringsoperationer i GridFS (ved hjælp af Java)?