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

MongoDB 집계 프레임워크로 NAME 필드의 중복 이름 빈도 계산하기

MongoDB에서 특정 필드에 값이 몇 번 등장하는지, 즉 중복 값의 빈도(frequency)를 확인하고 싶다면 aggregate() 메서드와 함께 $group 연산자를 사용하면 됩니다. 이 글에서는 예제 컬렉션을 만들고, 이름(Name)별 등장 횟수를 집계하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 데이터 준비

먼저 문서를 담은 컬렉션을 생성합니다. 아래 예제에서는 'demo635'라는 컬렉션에 여러 개의 이름 문서를 삽입합니다.

> db.demo635.insertOne({Name:"Chris"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e9c10f06c954c74be91e6cc")
}
> db.demo635.insertOne({Name:"David"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e9c10f46c954c74be91e6cd")
}
> db.demo635.insertOne({Name:"David"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e9c10f66c954c74be91e6ce")
}
> db.demo635.insertOne({Name:"Chris"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e9c10f86c954c74be91e6cf")
}
> db.demo635.insertOne({Name:"Bob"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e9c10fb6c954c74be91e6d0")
}
> db.demo635.insertOne({Name:"Chris"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e9c10fc6c954c74be91e6d1")
}

2. 저장된 문서 확인하기

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

> db.demo635.find();

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

{ "_id" : ObjectId("5e9c10f06c954c74be91e6cc"), "Name" : "Chris" }
{ "_id" : ObjectId("5e9c10f46c954c74be91e6cd"), "Name" : "David" }
{ "_id" : ObjectId("5e9c10f66c954c74be91e6ce"), "Name" : "David" }
{ "_id" : ObjectId("5e9c10f86c954c74be91e6cf"), "Name" : "Chris" }
{ "_id" : ObjectId("5e9c10fb6c954c74be91e6d0"), "Name" : "Bob" }
{ "_id" : ObjectId("5e9c10fc6c954c74be91e6d1"), "Name" : "Chris" }

출력 결과를 보면 'Chris'가 3번, 'David'가 2번, 'Bob'이 1번 등장한 것을 확인할 수 있습니다.

3. 집계 파이프라인으로 빈도 계산하기

이제 MongoDB 집계 프레임워크(aggregate)를 사용하여 각 이름의 빈도를 계산하는 쿼리를 살펴보겠습니다. 핵심은 $group으로 Name 필드 값을 기준으로 문서를 묶고, $sum: 1로 각 그룹의 문서 개수를 더하는 것입니다.

> db.demo635.aggregate([
...     { $unwind: "$Name" },
...     { $group: { "_id": "$Name", TotalFrequency: { $sum : 1 } } }
...     ]
... );

쿼리 실행 결과는 다음과 같습니다.

{ "_id" : "David", "TotalFrequency" : 2 }
{ "_id" : "Bob", "TotalFrequency" : 1 }
{ "_id" : "Chris", "TotalFrequency" : 3 }

정리

집계 파이프라인의 동작 원리를 간단히 정리하면 다음과 같습니다.

  • $unwind: 배열로 된 필드를 개별 문서로 분해합니다. Name 필드가 단일 값일 경우에도 안전하게 처리됩니다.
  • $group: '_id'에 '$Name'을 지정하여 같은 이름끼리 그룹화합니다.
  • $sum: 1: 그룹에 속한 문서마다 1씩 더해 해당 이름의 총 등장 횟수를 계산합니다.

이처럼 $group$sum 조합만으로 복잡한 로직 없이도 중복 값의 빈도를 손쉽게 집계할 수 있습니다. 이 패턴은 카테고리별 상품 수, 로그 레벨별 발생 횟수 등 다양한 통계 조회에 응용할 수 있습니다.