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

MongoDB 업데이트 작업으로 필드를 배열로 변환하는 방법

MongoDB에서 기존 필드의 단일 값을 배열 형태로 바꾸고 싶다면 $set 연산자를 활용하면 됩니다. 이 글에서는 실제 예제를 통해 문자열 타입의 필드를 배열 타입으로 변환하는 과정을 단계별로 살펴보겠습니다.

1. 테스트용 컬렉션 생성

먼저 insertOne() 메서드를 사용하여 문서가 하나 담긴 컬렉션을 생성합니다.

> db.convertAFieldToAnArrayDemo.insertOne({"StudentSubject":"MongoDB"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ce92d7778f00858fb12e91d")
}

2. 현재 문서 확인

find() 메서드를 사용하여 컬렉션에 저장된 모든 문서를 조회해 보겠습니다.

> db.convertAFieldToAnArrayDemo.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다. 현재 StudentSubject 필드는 일반 문자열 값임을 확인할 수 있습니다.

{ "_id" : ObjectId("5ce92d7778f00858fb12e91d"), "StudentSubject" : "MongoDB" }

3. $set 연산자로 필드를 배열로 변환하기

필드를 배열로 변환하려면 forEach()로 컬렉션의 각 문서를 순회하면서, 해당 문서의 _id를 조건으로 삼아 $set 연산자에 대괄호([])로 감싼 값을 전달하면 됩니다.

> db.convertAFieldToAnArrayDemo.find().forEach(function(myDocument) {
    db.convertAFieldToAnArrayDemo.update(
       { _id: myDocument._id },
       { "$set": { "StudentSubject": [myDocument.StudentSubject] } }
    );
})

여기서 핵심은 [myDocument.StudentSubject]처럼 기존 값을 배열 리터럴 안에 넣어 전달하는 부분입니다. 이렇게 하면 원래의 문자열 값이 요소 하나짜리 배열로 변경됩니다.

참고: 최신 버전의 MongoDB(4.2 이상)에서는 deprecated된 update() 대신 updateOne() 또는 updateMany() 메서드를 사용하는 것이 권장됩니다.

4. 변환 결과 확인

업데이트가 완료되었으므로 문서를 다시 한번 조회하여 결과를 확인해 보겠습니다.

> db.convertAFieldToAnArrayDemo.find();

실행 결과 StudentSubject 필드가 배열 형태로 성공적으로 변환된 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5ce92d7778f00858fb12e91d"), "StudentSubject" : [ "MongoDB" ] }

정리

MongoDB에서 특정 필드를 배열로 변환하는 절차는 다음과 같이 정리할 수 있습니다.

  • forEach()로 컬렉션 내 모든 문서를 순회합니다.
  • 각 문서의 _id를 기준으로 업데이트 조건을 지정합니다.
  • $set 연산자에 기존 필드 값을 대괄호로 감싸 전달하여 배열로 재설정합니다.

이 방식은 스키마 변경이나 데이터 마이그레이션 작업 시 단일 값을 배열 구조로 통일해야 할 때 매우 유용하게 활용됩니다.