복붙노트

[MONGODB] MongoDB의에서 "그룹화"와 최대 ()를 선택합니다

MONGODB

MongoDB의에서 "그룹화"와 최대 ()를 선택합니다

MongoDB를이 선택 문장을 변환 도와주세요 :

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

나는이 문서를 읽어 http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Group

하지만 여전히 해달라고 문서로 최대 () 메소드 대신 SUM ()를 적용하는 방법을 알고있다.

고맙습니다.

해결법

  1. ==============================

    1.다음과 같이 나는 몽고 컬렉션을 만들었습니다.

    다음과 같이 나는 몽고 컬렉션을 만들었습니다.

    { "_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 }
    

    그런 다음 자신의 이름과 최대 (값)에 의해 다음 코드 I 그룹을 사용하여

    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"}}}
    );
    
  2. ==============================

    2.집계 프레임 워크를 사용하여 :

    집계 프레임 워크를 사용하여 :

    db.table1.aggregate({$group:{'_id':'$name', 'max':{$max:'$value'}}}, 
    {$sort:{'max':1}}).result
    
  3. ==============================

    3.

    var myresult = db.table1.aggregate([{ 
        $group: {
            _id:"$Name",                                                                     
            value: { $max: "$Value" } 
        } 
    }]);
    print(myresult)
    
  4. ==============================

    4.MongoDB를 지원하기 때문에 기능 아래 맵리 듀스는해야한다.

    MongoDB를 지원하기 때문에 기능 아래 맵리 듀스는해야한다.

    db.employee.insert({name:"Tejas",Value:2})
    db.employee.insert({name:"Tejas",Value:3})
    db.employee.insert({name:"Varma",Value:1})
    db.employee.insert({name:"Varma",Value:6})
    
    var map=function(){
    var key={name:this.name};
    var value={value:this.Value};
    emit(key,value);
    };
    
    var reduce=function(key,values){
    var max=-1;
    values.forEach(function(value){
                if(max==-1){
            max=value['value'];
        }
        if(max<value['value']){
            max=value['value'];
        }
    });
    return {max:max};
    };
    

    db.employee.mapReduce가 (지도, 감소 {{인라인 :에서 1}});

  5. from https://stackoverflow.com/questions/10612660/select-max-with-group-by-in-mongodb by cc-by-sa and MIT license