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

MongoDB에서 배열 값을 다른 필드와 연결하는 쿼리 작성법

MongoDB에서 배열 값과 다른 필드를 하나로 합치는 방법

MongoDB에서 문자열을 이어 붙일 때는 $concat 연산자를 사용하며, 주로 $project 단계와 함께 활용됩니다. 특히 배열에 담긴 여러 값을 하나의 문자열로 만든 뒤, 다른 필드와 결합해야 하는 경우에는 $reduce 연산자를 함께 사용하면 효과적입니다.

이 글에서는 실제 예제를 통해 배열의 각 요소를 공백으로 구분된 하나의 문자열로 합치고, 그 결과를 다른 필드와 연결하는 과정을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 데모용 컬렉션을 만들고 문서를 삽입합니다.

> db.demo359.insertOne(
...     {
...        Name1: "Chris",
...        Name2: "David",
...        Subjects: ["MySQL","MongoDB","Java"]
...    }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e5694cdf8647eb59e5620d0")
}

2. 저장된 문서 확인하기

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

> db.demo359.find().pretty();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{
    "_id" : ObjectId("5e5694cdf8647eb59e5620d0"),
    "Name1" : "Chris",
    "Name2" : "David",
    "Subjects" : [
       "MySQL",
       "MongoDB",
       "Java"
    ]
}

3. 배열 값을 다른 필드와 연결하는 집계 쿼리

이제 핵심인 쿼리입니다. $reduce로 배열 요소들을 순회하며 하나의 문자열로 누적한 후, 두 번째 $project 단계에서 $concat을 사용해 Name1 필드와 결합합니다.

> db.demo359.aggregate([
...    {
...       $project: {
...          values: {
...             $reduce: {
...                input: '$Subjects',
...                initialValue: '',
...                in: {
...                   $concat: ['$$value',' ','$$this']
...                 }
...             }
...          },
...          Name1: 1
...    }
...    },
...    {
...       $project: {
...          'ConcatResult': { '$concat': [ '$Name1', '$values'] }
...       }
...    }
... ])
{ "_id" : ObjectId("5e5694cdf8647eb59e5620d0"), "ConcatResult" : "Chris MySQL MongoDB Java" }

4. 실행 결과

쿼리를 실행하면 아래와 같이 이름과 과목 목록이 하나의 문자열로 연결된 결과를 얻을 수 있습니다.

{ "_id" : ObjectId("5e5694cdf8647eb59e5620d0"), "ConcatResult" : "Chris MySQL MongoDB Java" }

동작 원리 정리

  • $reduce: 배열($Subjects)의 각 요소($$this)를 순서대로 순회하면서 초기값('')부터 시작해 결과를 누적합니다($$value).
  • $concat: 누적되는 문자열 사이에 공백(' ')을 넣어 가독성 있게 이어 붙입니다.
  • 두 번째 $project: 완성된 values 문자열과 Name1 필드를 최종적으로 하나의 ConcatResult 필드로 합칩니다.

이처럼 $reduce와 $concat을 조합하면 MongoDB에서도 배열 데이터를 손쉽게 문자열로 변환하고, 다른 필드와 자유롭게 조합할 수 있습니다.