$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}} )
댓글 없음:
댓글 쓰기