sql >> データベース >  >> NoSQL >> MongoDB

MongoDBアグリゲーションフレームワークの$groupは値の配列を返すことができますか?

    Aggregation Frameworkを使用して2つのフィールドを値の配列に結合することは可能ですが、(少なくともMongoDB 2.2.0の場合ほど)簡単ではありません。

    次に例を示します:

    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. mongodbコレクションから最新のレコードを取得する

    2. バッチでmongoDBレコードを検索する(mongoid ruby​​アダプターを使用)

    3. アプリとウェブページ間のリアルタイム通信

    4. Rails3.2でMongoidを使用するときにdatabase.ymlを削除する