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

MongoDB에서 반복되는 값의 개수를 구하는 그룹 쿼리 사용법 ($group과 $sum 활용)

MongoDB에서 특정 필드에 중복된 값이 몇 번 나타나는지 확인하고 싶다면 집계 파이프라인(Aggregation Pipeline)을 활용하면 됩니다. 핵심은 $group 연산자로 데이터를 묶고, $sum 연산자로 각 그룹의 문서 수를 세는 것입니다.

1. 샘플 컬렉션 생성하기

먼저 실습용으로 'Marks'(점수) 필드를 가진 문서들을 컬렉션에 삽입해 보겠습니다.

> db.demo676.insertOne({"Marks":87});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea41eed04263e90dac943f2")
}
> db.demo676.insertOne({"Marks":75});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea41ef304263e90dac943f3")
}
> db.demo676.insertOne({"Marks":87});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea41ef404263e90dac943f4")
}
> db.demo676.insertOne({"Marks":65});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea41ef704263e90dac943f5")
}
> db.demo676.insertOne({"Marks":65});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea41ef804263e90dac943f6")
}

2. 저장된 문서 전체 조회하기

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

> db.demo676.find();

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

{ "_id" : ObjectId("5ea41eed04263e90dac943f2"), "Marks" : 87 }
{ "_id" : ObjectId("5ea41ef304263e90dac943f3"), "Marks" : 75 }
{ "_id" : ObjectId("5ea41ef404263e90dac943f4"), "Marks" : 87 }
{ "_id" : ObjectId("5ea41ef704263e90dac943f5"), "Marks" : 65 }
{ "_id" : ObjectId("5ea41ef804263e90dac943f6"), "Marks" : 65 }

결과를 보면 점수 87은 2번, 75는 1번, 65는 2번 등장했습니다. 이제 이 중복 횟수를 집계 쿼리로 계산해 보겠습니다.

3. $group과 $sum으로 중복 횟수 집계하기

반복되는 점수의 개수를 구하는 쿼리는 다음과 같습니다.

> db.demo676.aggregate( { $group: {
...    _id: {Marks: "$Marks" },
...    'Count': { $sum :1 }
... }})

쿼리 설명:

  • $group: _id$Marks 값을 지정하여 같은 점수를 가진 문서들을 하나의 그룹으로 묶습니다.
  • $sum: 1: 각 그룹에 속한 문서가 발견될 때마다 1씩 더해 해당 값의 등장 횟수를 계산합니다.

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

{ "_id" : { "Marks" : 75 }, "Count" : 1 }
{ "_id" : { "Marks" : 65 }, "Count" : 2 }
{ "_id" : { "Marks" : 87 }, "Count" : 2 }

정리

이처럼 MongoDB에서는 $group으로 기준 필드별로 문서를 묶고 $sum: 1로 개수를 더하는 방식만으로도 손쉽게 중복 값의 빈도를 집계할 수 있습니다. 이 패턴은 로그 분석, 카테고리별 통계, 태그 빈도 계산 등 다양한 실무 상황에서 널리 활용됩니다.