복붙노트

[MONGODB] MongoDB를이 - 콜렉션에서 그룹 당 최대 속성을 가진 문서를 얻을 수

MONGODB

MongoDB를이 - 콜렉션에서 그룹 당 최대 속성을 가진 문서를 얻을 수

내 데이터는 다음과 같습니다 :

session, age, firstName, lastName
1, 28, John, Doe
1, 21, Donna, Keren
2, 32, Jenna, Haze
2, 52, Tommy, Lee
..
..

나는 세션 당 (나이) 가장 큰 모든 행을 좀하고 싶습니다. 그래서 그래서 위의 입력 내 출력과 같을 것이다 :

sessionid, age, firstName, lastName
1, 28, John, Doe
2, 52, Tommy, Lee

요한은 세션 = 1 개 그룹에서 가장 큰 연령을 가지고 있으며, 토미는 세션 = 2 그룹에서 가장 큰 연령을 가지고 있기 때문에.

나는 파일 (CSV)로 결과를 내 보내야하며 기록을 많이 포함되어있을 수 있습니다.

이걸 어떻게 달성 할 수 있습니까?

해결법

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

    1.http://docs.mongodb.org/manual/reference/operator/aggregation/max/ : 당신은 최대 속성을 사용하여 집계 쿼리 아래를 시도 할 수

    http://docs.mongodb.org/manual/reference/operator/aggregation/max/ : 당신은 최대 속성을 사용하여 집계 쿼리 아래를 시도 할 수

    db.collection.aggregate([
       $group: {
           "_id": "$session",           
           "age": { $max: "$age" }
         },
       { $out : "max_age" }
    ])
    

    결과는 새로운 수집 MAX_AGE로 출력해야하고 당신은 CSV로 덤프 할 수있다.

    참고 : 그것은 단지 세션 및 최대 연령을 줄 것이다 및 기타 분야를 반환하지 않습니다.

  2. ==============================

    2.그대로 MongoDB를 통합 제공,하지만 귀하의 경우에는 "전체"레코드를 $ 최대 연산자를 원한다. 여기에서 할 수있는 적절한 것은 $ 일종이며, 그래서 다음 $ 그룹 문 내에서 $ 최초의 연산자를 사용합니다 :

    그대로 MongoDB를 통합 제공,하지만 귀하의 경우에는 "전체"레코드를 $ 최대 연산자를 원한다. 여기에서 할 수있는 적절한 것은 $ 일종이며, 그래서 다음 $ 그룹 문 내에서 $ 최초의 연산자를 사용합니다 :

    db.collection.aggregate([
        { "$sort": { "session": 1, "age": -1 } },
        { "$group": {
            "_id": "$session",
            "age": { "$first": "$age" },
            "firstName": { "$first" "$firstName" },
            "lastName": { "$first": "$lastName" }
        }}
    ])
    

    은 "정렬"주문 권리를 취득하고는 "그룹화"해당 필드가 존재하는 "그룹화"키 내에서 첫 번째 항목을 선택합니다 그래서.

    먼저 여기 대부분 $ $ 일종의 역순으로 수행되기 때문이다. 또한 경우 오름차순으로뿐만 아니라 $ 마지막을 사용할 수 있습니다.

  3. from https://stackoverflow.com/questions/25892928/mongodb-get-documents-with-max-attribute-per-group-in-a-collection by cc-by-sa and MIT license