MongoDB에서 그룹화를 객체로 투영하는 방법
MongoDB에서 배열 형태의 문서 데이터를 과목명을 키(key)로, 점수를 값(value)으로 하는 객체 형태로 변환하고 싶은 경우가 있습니다. 이번 글에서는 forEach()를 활용해 그룹화된 데이터를 하나의 객체로 투영(projection)하고, 원하는 필드만 깔끔하게 표시하는 방법을 단계별로 알아보겠습니다.
1단계: 샘플 문서 생성
먼저 예제로 사용할 문서를 생성합니다.
> var document = [
... { "SubjectName" : "MySQL", "Marks" : 78 },
... { "SubjectName" : "MongoDB", "Marks" : 89 },
... { "SubjectName" : "Java", "Marks" : 71 },
... ];2단계: 생성한 문서 확인
다음 쿼리를 실행해 문서가 정상적으로 저장되었는지 확인합니다.
> printjson(document);
실행하면 아래와 같은 출력 결과를 얻을 수 있습니다.
[
{
"SubjectName" : "MySQL",
"Marks" : 78
},
{
"SubjectName" : "MongoDB",
"Marks" : 89
},
{
"SubjectName" : "Java",
"Marks" : 71
}
]3단계: 그룹화를 객체로 투영하기
이제 빈 객체를 만들고, forEach() 반복문을 사용하여 각 문서의 SubjectName 값을 키로, Marks 값을 해당 키의 값으로 할당합니다. 이렇게 하면 불필요한 필드는 제외되고 필요한 필드만 포함된 객체가 완성됩니다.
> var makeObject = {};
> document.forEach(function (d){
... makeObject[d.SubjectName] = d.Marks;
... });
> printjson(makeObject);출력 결과
위 쿼리를 실행하면 다음과 같이 과목명이 키가 되고 점수가 값이 되는 단일 객체가 출력됩니다.
{ "MySQL" : 78, "MongoDB" : 89, "Java" : 71 }정리
이처럼 MongoDB에서는 forEach()를 이용해 배열 형태의 문서를 원하는 구조의 객체로 손쉽게 변환할 수 있습니다. 이 방식은 클라이언트에 전달할 데이터를 간결하게 만들거나, 조회 성능과 가독성을 높이고 싶을 때 유용하게 활용할 수 있습니다.