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

MongoDB update 연산으로 필드를 배열 타입으로 변환하는 방법

MongoDB에서 기존 문서의 특정 필드를 배열(Array) 형태로 변환해야 하는 경우가 종종 있습니다. 예를 들어 단일 문자열로 저장된 데이터를 나중에 여러 값을 담을 수 있도록 배열 구조로 바꾸고 싶다면, forEach() 메서드 안에서 update 작업을 수행하면 간단하게 처리할 수 있습니다.

1. 테스트용 컬렉션 생성

먼저 insertOne() 메서드를 사용해 샘플 문서가 담긴 컬렉션을 만들어 보겠습니다.

> db.demo18.insertOne({"StudentName":"John"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e1387fc55d0fc6657d21f0e")
}

2. 현재 문서 상태 확인

find() 메서드를 호출해 컬렉션에 저장된 모든 문서를 조회합니다.

> db.demo18.find();

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e1387fc55d0fc6657d21f0e"), "StudentName" : "John" }

현재 StudentName 필드는 일반 문자열 값으로 저장되어 있는 것을 확인할 수 있습니다.

3. update 작업으로 필드를 배열로 변환하기

이제 forEach()를 이용해 컬렉션의 모든 문서를 순회하면서, 각 문서의 _id를 조건으로 $set 연산자를 적용해 StudentName 필드를 배열로 변경합니다.

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

여기서 핵심은 [myDocument.StudentName]처럼 기존 값을 대괄호([])로 감싸 배열 요소로 만들어 주는 부분입니다. 이렇게 하면 모든 문서의 해당 필드가 한 번에 배열 구조로 변환됩니다.

4. 변환 결과 확인

변환이 완료되면 다시 find() 메서드로 결과를 조회해 봅니다.

{ "_id" : ObjectId("5e1387fc55d0fc6657d21f0e"), "StudentName" : [ "John" ] }

StudentName 필드가 문자열 "John"에서 배열 [ "John" ]로 성공적으로 변환된 것을 확인할 수 있습니다.

참고 사항

최신 MongoDB 버전에서는 update()보다 updateOne(), updateMany() 같은 메서드 사용이 권장됩니다. 또한 위 예제처럼 forEach()와 조건별 업데이트를 조합하면 대량의 데이터를 대상으로 하는 스키마 마이그레이션 작업에도 유용하게 활용할 수 있습니다.