Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 특정 조건에 맞는 키 값 합산하기 – $match와 $group 완벽 가이드

MongoDB에서 특정 조건을 만족하는 문서들의 키 값을 합산하려면 aggregate() 메서드와 함께 $match 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 데모용 컬렉션을 만들고 문서를 삽입해 보겠습니다. insertOne() 메서드를 사용하여 네 개의 문서를 추가합니다.

> db.demo329.insertOne({"Name":"Chris","Age":21,"Marks":45});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e516f28f8647eb59e56207d")
}
> db.demo329.insertOne({"Name":"David","Age":21,"Marks":56});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e516f28f8647eb59e56207e")
}
> db.demo329.insertOne({"Name":"Mike","Age":21,"Marks":78});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e516f29f8647eb59e56207f")
}
> db.demo329.insertOne({"Name":"David","Age":21,"Marks":89});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e516f29f8647eb59e562080")
}

2. 저장된 문서 확인하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.

> db.demo329.find().pretty();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{
   "_id" : ObjectId("5e516f28f8647eb59e56207d"),
   "Name" : "Chris",
   "Age" : 21,
   "Marks" : 45
}
{
   "_id" : ObjectId("5e516f28f8647eb59e56207e"),
   "Name" : "David",
   "Age" : 21,
   "Marks" : 56
}
{
   "_id" : ObjectId("5e516f29f8647eb59e56207f"),
   "Name" : "Mike",
   "Age" : 21,
   "Marks" : 78
}
{
   "_id" : ObjectId("5e516f29f8647eb59e562080"),
   "Name" : "David",
   "Age" : 21,
   "Marks" : 89
}

3. 키 값 합산 쿼리 작성하기

이제 특정 키 값을 합산하는 쿼리를 작성해 보겠습니다. 여기서는 이름이 'David'이면서 나이가 21살인 문서Marks(점수) 합계를 구합니다.

쿼리의 동작 방식은 다음과 같습니다.

  • $match: 조건에 맞는 문서만 필터링합니다. 이 예제에서는 $and 연산자를 사용해 두 조건(Name이 'David', Age가 21)을 모두 만족하는 문서를 선택합니다.
  • $group: 필터링된 문서들을 그룹화합니다. _id: null로 지정하면 전체 문서를 하나의 그룹으로 묶습니다.
  • $sum: 그룹 내 각 문서의 Marks 필드 값을 모두 더합니다.
> db.demo329.aggregate([
...    {
...       $match: {
...          $and: [
...             { 'Name': 'David'},
...             { Age:21}
...          ]
...       }
...    },
...    {
...       $group: {
...          _id: null,
...          TotalMarks: { $sum: "$Marks" }
...       }
...    }
... ])

4. 실행 결과

위 집계 파이프라인을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : null, "TotalMarks" : 145 }

David의 점수는 56점과 89점으로, 두 값을 합하면 정확히 145가 나옵니다. Chris(45점)와 Mike(78점)의 문서는 조건에 맞지 않아 제외된 것을 확인할 수 있습니다.

마무리

이처럼 MongoDB에서는 $match로 원하는 문서를 먼저 걸러낸 뒤, $group$sum을 조합하면 손쉽게 특정 키 값의 합계를 계산할 수 있습니다. 조건이 하나뿐이라면 $and 없이 { Name: 'David' } 형태로 간결하게 작성할 수도 있습니다. 이 패턴은 매출 합계, 주문 수량 집계 등 다양한 데이터 분석 작업에 응용할 수 있으니 꼭 기억해 두세요.