24

この選択文をmongodbに変換するのを手伝ってください:

Select Name, Max(Value) From table1 Group By Name

このドキュメントを読みました: http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Group

ただし、そのドキュメントとして SUM() の代わりに Max() メソッドを適用する方法はまだわかりません。

ありがとうございました。

4

4 に答える 4

28

以下のようにMongo Collectionを作成しました。

{ "_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"}}
    }
]);
于 2012-05-16T09:17:16.817 に答える
20

集約フレームワークの使用:

db.table1.aggregate({$group:{'_id':'$name', 'max':{$max:'$value'}}}, 
{$sort:{'max':1}}).result
于 2012-11-07T18:29:47.517 に答える