MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bisakah kerangka agregasi MongoDB $group mengembalikan array nilai?

Menggabungkan dua bidang ke dalam larik nilai dengan Kerangka Agregasi dimungkinkan, tetapi jelas tidak semudah yang diharapkan (setidaknya seperti di MongoDB 2.2.0).

Ini contohnya:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dapatkan semua nama bidang dalam koleksi mongodb?

  2. Pengantar Morphia – Java ODM untuk MongoDB

  3. Apakah ada cara untuk memperbarui dua koleksi secara atom di MongoDB?

  4. MongoDB:Bagaimana cara menanyakan catatan di mana bidang nol atau tidak disetel?

  5. mongodb memindahkan dokumen dari satu koleksi ke koleksi lain