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

MongoDB에서 단순 필드를 객체로 변환하는 방법 ($rename 활용)

MongoDB에서 단순 필드를 객체로 변환하기

MongoDB에서 기존의 단순 필드를 객체(내장 문서) 형태로 바꾸고 싶다면 $rename 연산자를 활용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 변환 과정을 살펴보겠습니다.

1. 테스트 컬렉션 생성

먼저 예제에 사용할 컬렉션을 만들고 문서를 하나 삽입합니다.

> db.changeSimpleFieldDemo.insertOne({"StudentMarks":58,"StudentSubject":"MySQL"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e0847a825ddae1f53b62205")
}

2. 저장된 문서 확인하기

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

> db.changeSimpleFieldDemo.find();

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

{ "_id" : ObjectId("5e0847a825ddae1f53b62205"), "StudentMarks" : 58, "StudentSubject" : "MySQL" }

3. $rename으로 필드를 객체 구조로 변환

단순 필드를 객체로 바꾸려면 두 단계로 진행합니다. 먼저 대상 필드를 임시 필드(아래 예제에서는 "obj")로 이름을 변경한 뒤, 다시 원하는 객체 경로로 rename하면 됩니다.

> db.changeSimpleFieldDemo.update({}, {$rename: {StudentMarks: 'obj'}}, {multi: true});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.changeSimpleFieldDemo.update({},
... {$rename: {obj: 'Student.Marks', StudentSubject: 'Student.Subject'}},
... {multi: true});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

쿼리 실행 후 문서를 다시 조회하면 기존의 StudentMarks와 StudentSubject 필드가 하나의 객체로 통합된 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5e0847a825ddae1f53b62205"), "Student" : { "Marks" : 58, "Subject" : "MySQL" } }

참고 사항

$rename은 필드 이름을 변경하는 연산자로, 도트(.) 표기법을 함께 사용하면 필드를 하위 문서 경로로 손쉽게 이동시킬 수 있습니다. multi: true 옵션을 지정하면 조건에 일치하는 모든 문서에 일괄 적용됩니다. 또한 최신 MongoDB 버전에서는 update() 대신 updateMany() 또는 updateOne() 메서드 사용이 권장되므로, 새 프로젝트에서는 이들을 사용하는 것이 좋습니다.