본문 바로가기

Programming

[MongoDB} aggregate 간단 사용 예시

1. aggregate 사용 예시

db.collection.aggregate(pipeline, options)
db.collection.explain().ageaggregate(pipeline, options)

몽고 DB의 aggregate는 위와 같은 양식으로 사용가능하며, explain을 통해 실행 계획을 확인할 수 있다.

{ "_id" : ObjectId("aaa"), "corp_code" : "1111", "shares" : 100, "price" : 100 }
{ "_id" : ObjectId("bbb"), "corp_code" : "1111", "shares" : 200, "price" : 200 }
{ "_id" : ObjectId("ccc"), "corp_code" : "2222", "shares" : 300, "price" : 300 }
{ "_id" : ObjectId("ddd"), "corp_code" : "2222", "shares" : 400, "price" : 400 }

db.Stock.aggregate([
    { $match: { corp_code: "1111" } },
    { $group: { _id: "$corp_code", total_shares: { $sum: "$shares" } } },
    { $sort: { total_shares: -1 } }
])

예시로 위와 같은 document가 있다고 가정 시, $match에서 corp_code가 1111인 document를 찾고, $group에서 shares를 total_shares로 합산 및 corp_code 필드 별로 그룹 후, $sort에서 total_shares 필드 기준 내림차순으로 나타내게 된다.

{ "_id" : "1111", "totalShares" : 300 }

$match $group 이외에도 $limit $lookup 등 pipeline에 많은 단계들을 적용할 수 있다.

반응형