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

mongodbでgroupbyを使用してMax()を選択します

    次のようにMongoコレクションを作成しました。

    { "_id" : ObjectId("4fb36bfd3d1c88bfa15103b1"), "name" : "bob", "value" : 5 }
    { "_id" : ObjectId("4fb36c033d1c88bfa15103b2"), "name" : "bob", "value" : 3 }
    { "_id" : ObjectId("4fb36c063d1c88bfa15103b3"), "name" : "bob", "value" : 7 }
    { "_id" : ObjectId("4fb36c0c3d1c88bfa15103b4"), "name" : "john", "value" : 2 }
    { "_id" : ObjectId("4fb36c103d1c88bfa15103b5"), "name" : "john", "value" : 4 }
    { "_id" : ObjectId("4fb36c143d1c88bfa15103b6"), "name" : "john", "value" : 8 }
    { "_id" : ObjectId("4fb36c163d1c88bfa15103b7"), "name" : "john", "value" : 6 }
    

    次に、次のコードを使用して、名前とmax(value)でグループ化します

    db.table1.group(
        {key: {name:true},
            reduce: function(obj,prev) { 
                if (prev.maxValue < obj.value) { 
                    prev.maxValue = obj.value; 
                }  
            },
        initial: { maxValue: 0 }}
    );
    

    結果は次のように表示されます

    [
        {
            "name" : "bob",
            "maxValue" : 7
        },
        {
            "name" : "john",
            "maxValue" : 8
        }
    ]
    

    集約フレームワークを使用すると、はるかに簡単になります。集計フレームワークを使用すると、次のコードでも同じ結果を得ることができます。

    db.table1.aggregate([
        {
           $group:{_id:"$name", "maxValue": {$max:"$value"}}
        }
    ]);
    


    1. mongodbシェルのforEachで更新

    2. 2022年のMongoDBチュートリアル– MongoDBとは何ですか?

    3. MongoコレクションをJSON形式にダンプします

    4. 時間ベースの値を並べ替えるためのRedisデータ構造設計