sql >> Database >  >> NoSQL >> MongoDB

Kan het MongoDB-aggregatieraamwerk $group een reeks waarden retourneren?

Het combineren van twee velden in een array van waarden met het Aggregation Framework is mogelijk, maar is zeker niet zo eenvoudig als het zou kunnen zijn (tenminste zoals bij MongoDB 2.2.0).

Hier is een voorbeeld:

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. DbRef met Mongoose - mangoest-dbref of bevolken?

  2. MongoDB $push

  3. Voeg $lookup samen met C#

  4. Azure DataBricks Stream foreach mislukt met NotSerializableException