MongoDB에서 _id별로 그룹화하기
MongoDB에서 문서를 _id 기준으로 그룹화하려면 애그리게이션 파이프라인의 $group 연산자를 사용합니다. $group은 지정한 키를 기준으로 문서들을 묶어주며, $sum 같은 누적 연산자와 함께 사용하면 그룹별 통계를 손쉽게 계산할 수 있습니다.
먼저 예제에 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.
1. 컬렉션 생성 및 데이터 삽입
insertOne() 메서드를 사용해 demo529 컬렉션에 여러 개의 문서를 추가합니다.
> db.demo529.insertOne({"Score":10});{
"acknowledged" : true,
"insertedId" : ObjectId("5e8b1d5bef4dcbee04fbbbe4")
}
> db.demo529.insertOne({"Score":20});{
"acknowledged" : true,
"insertedId" : ObjectId("5e8b1d5fef4dcbee04fbbbe5")
}
> db.demo529.insertOne({"Score":10});{
"acknowledged" : true,
"insertedId" : ObjectId("5e8b1d61ef4dcbee04fbbbe6")
}
> db.demo529.insertOne({"Score":10});{
"acknowledged" : true,
"insertedId" : ObjectId("5e8b1d62ef4dcbee04fbbbe7")
}2. 전체 문서 조회
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo529.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e8b1d5bef4dcbee04fbbbe4"), "Score" : 10 }
{ "_id" : ObjectId("5e8b1d5fef4dcbee04fbbbe5"), "Score" : 20 }
{ "_id" : ObjectId("5e8b1d61ef4dcbee04fbbbe6"), "Score" : 10 }
{ "_id" : ObjectId("5e8b1d62ef4dcbee04fbbbe7"), "Score" : 10 }3. _id 기준 그룹화 쿼리 실행
다음은 $group을 사용하여 전체 문서를 하나의 그룹으로 묶고 문서 개수를 집계하는 쿼리입니다. _id: null로 지정하면 모든 문서가 단일 그룹으로 처리됩니다.
> db.demo529.aggregate( [
... {
... $group: {
... _id: null,
... count: { $sum: 1 }
... }
... }
... ] )
실행 결과는 다음과 같습니다.
{ "_id" : null, "count" : 4 }결과를 살펴보면 _id가 null인 단일 그룹이 생성되었고, count 필드에 전체 문서 수인 4가 집계된 것을 확인할 수 있습니다. 참고로 특정 필드 값별로 그룹화하고 싶다면 _id: "$Score"처럼 필드명을 지정하면 되며, 이 경우 Score 값이 같은 문서끼리 각각 그룹으로 묶이게 됩니다.