[컴][웹][DB] MongoDB aggregation 예제 - max 일 때 index 얻어오는 방법

max 일때 id 값 가져오기 / max 일 때 index 값 구하기 / aggregation 에서 max 일 때 index 값 구하기



$max  OR  $sort+$first


max 를 구하는데, 그 때의 어떤 field 값을 구하고 싶을 때
max 순으로 정렬하고, $first 를 이용해서 첫번째 값을 가져오면 된다. 이 때 $first 가 $max 값과 같을 것이다.

여기서 핵심은
$max 
대신에
$sort + $first
를 사용한다는 것이다.





db.status.aggregate(
    {$match:{ product_id : 2, s_id : { "$ne" : 0}, datetime : { "$gte" : "201402110000" , "$lte" : "201402112355"} }},
    {$group:{ 
        _id : {ss_id :"$s_id", domain_seq : "$domain_seq",
            path_id : "$path_id", datetime : "$datetime"},
        bytes : {$sum : "$bytes"}
    }},
    {$sort : { bytes: -1 } },
    {$group:{
        _id : {sss_id :"$_id.ss_id", domain_seq : "$_id.domain_seq",
            path_id : "$_id.path_id"},
        bytes : {$max : "$bytes"},
        datetime : { $first : "$_id.datetime"}
    }},
    {$sort : { bytes: -1 } },
    {$limit:10}
 );


group _id 에 $cond 사용 예제

code 가 7 인 녀석을 code 가 8 인 녀석과 합쳐서 계산하고, 나머지 code 는 각자 sum 을 계산하게 된다.

db.colll.aggregate(
{ "$match" : { "id" : 3 , "domain" : 175 , "path" : 215, "datetime" : { "$gte" : "201411010100" , "$lte" : "201411010259"}}}

,{ "$group" : { "_id" : { "datetime" : "$datetime" , "code" : {$cond: [{$eq:["$code", 7]}, 8, "$code"]}} , "count" : { "$sum" : "$count"}}}
,{ "$sort" : { "_id.datetime" : 1}}
)

댓글 없음:

댓글 쓰기