MongoDB에서 반환 형식 지정하기
MongoDB에서는 $addToSet 연산자를 활용하면 여러 문서에 흩어져 있는 값을 하나의 배열로 묶어 원하는 반환 형식으로 결과를 얻을 수 있습니다. 이번 글에서는 실제 예제를 통해 그 사용법을 단계별로 살펴보겠습니다.
1. 컬렉션 생성 및 문서 삽입
먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입합니다.
> db.demo207.insertOne({"FavouriteTechnology":"Spring Boot"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3d8e7a03d395bdc21346f1")
}
> db.demo207.insertOne({"FavouriteTechnology":"MongoDB"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3d8e8f03d395bdc21346f2")
}
> db.demo207.insertOne({"FavouriteTechnology":"Groovy"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3d8ea603d395bdc21346f3")
}2. find() 메서드로 전체 문서 조회
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo207.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e3d8e7a03d395bdc21346f1"), "FavouriteTechnology" : "Spring Boot" }
{ "_id" : ObjectId("5e3d8e8f03d395bdc21346f2"), "FavouriteTechnology" : "MongoDB" }
{ "_id" : ObjectId("5e3d8ea603d395bdc21346f3"), "FavouriteTechnology" : "Groovy" }3. $addToSet으로 반환 형식 지정하기
이제 애그리게이션 파이프라인에서 $group과 $addToSet, $project를 조합하여 각 기술 이름이 배열 형태로 담긴 결과를 반환하도록 쿼리를 작성해 보겠습니다.
> db.demo207.aggregate([
... {
... "$group": {
... "_id": 0,
... "FavouriteTechnology": {
... "$addToSet": "$FavouriteTechnology"
... }
... }
... },
... {
... "$project": {
... "_id": 0,
... "FavouriteTechnology": 1
... }
... }
...]);실행 결과는 다음과 같습니다.
{ "FavouriteTechnology" : [ "MongoDB", "Groovy", "Spring Boot" ] }쿼리 동작 방식 설명
- $group:
_id를 0으로 지정해 모든 문서를 하나의 그룹으로 묶습니다. - $addToSet: 그룹 내
FavouriteTechnology필드 값들을 중복 없이 배열로 수집합니다. - $project:
_id필드를 제외하고FavouriteTechnology필드만 결과에 포함시킵니다.
이처럼 $addToSet을 활용하면 개별 문서에 저장된 값들을 손쉽게 하나의 배열로 변환할 수 있어, API 응답 형식을 정제하거나 데이터 요약 작업에 매우 유용합니다.