4

내 데이터는 다음과 같습니다 모음에서 그룹 당 최대 속성을 가진 문서를 얻을 : 나는 세션 당 (나이) 가장 큰 모든 행을 좀하고 싶습니다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)로 내보내고 많은 레코드가 필요할 수 있습니다.

어떻게하면됩니까?

답변

-4

당신은 최대 속성을 사용하여 아래의 집계 쿼리를 시도 할 수 있습니다 : 결과는 새로운 수집 MAX_AGE에 출력한다 http://docs.mongodb.org/manual/reference/operator/aggregation/max/

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

을 다음 당신은 CSV로 덤프 할 수있다.

참고 : 세션 및 최대 기간 만 제공하며 다른 입력란은 반환하지 않습니다.

+1

질문을 읽지 않았습니다. '$ max'는 "전체"레코드를 위해 그것을 잘라 내지 않습니다. –

+2

@ NeeLunn 나는 당신이하는 말을 이해하지 못한다. 그러나 나는 당신이 나의 대답에서 그 주를 읽었기를 바란다. –

+2

@LalitAgarwal은 훌륭하게 작동합니다. 감사합니다. – orcaman

11

MongoDB aggregation은 $max 연산자를 제공하지만, 귀하의 경우에는 "전체"레코드를 그대로 유지해야합니다. 그래서 여기 할 수있는 적절한 것은 $sort하고 다음 $group 문 내에서 $first 연산자를 사용

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

는 그래서 "정렬"순서를 바로 얻을하고 "그룹"은 "그룹 내에서 첫 번째 항목을 선택합니다 "해당 필드가있는 키.

$sort이 역순으로 수행되기 때문에 주로 여기에 $first이 있습니다. 오름차순의 경우에도 $last을 사용할 수 있습니다.

+0

건배. 나는 이것을 사용하려고 시도했지만, 어떤 이유로 그 결과 하나의 문서만을 얻고있다. 내 질문을 참조하십시오 (일부 코드를 추가하기 위해 편집했습니다). – orcaman

+0

@orcaman 질문에서 용어를 변경했습니다. 당신이 문서화 한 필드가 "session"인지 아니면 "sessionid"인지. "잘라 내기 및 붙여 넣기"에 의존하지 말고 코드 예제의 개념을 살펴보십시오. –

+0

안녕 닐, 잘라내 지 않았고 붙여 넣기도하지 않았습니다. 실제 구조는 상당히 다릅니다 (세션 또는 세션 ID 오타는 오류와 관련이 없습니다). 나는 모을 수있다.) 위의 내 질문을 검토하십시오 (설명을 위해 편집했습니다). – orcaman