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

MongoDB에서 자식(중첩) 객체를 업데이트하는 방법 – $set 연산자 완벽 가이드

MongoDB에서 자식 객체 업데이트하기

MongoDB에서 문서 안에 중첩된 자식(nested) 객체의 특정 필드를 수정하려면 $set 연산자를 사용합니다. 이때 핵심은 점 표기법(dot notation)으로 '부모필드.자식필드' 형태로 경로를 지정하는 것입니다.

실제 예제를 통해 단계별로 살펴보겠습니다.

1단계: 샘플 컬렉션 생성

먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다. StudentDetails라는 자식 객체가 포함된 문서입니다.

> db.demo21.insertOne({"StudentId":"STU-101","StudentDetails":{"StudentName":"Chris","StudentAge":21}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e14be8922d07d3b95082e6f")
}

2단계: 저장된 문서 확인

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

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

위 쿼리는 다음과 같은 출력 결과를 반환합니다.

{
   "_id" : ObjectId("5e14be8922d07d3b95082e6f"),
   "StudentId" : "STU-101",
   "StudentDetails" : {
      "StudentName" : "Chris",
      "StudentAge" : 21
   }
}

3단계: $set으로 자식 객체 필드 업데이트

다음은 MongoDB에서 자식 객체를 업데이트하는 쿼리입니다. 조건으로 StudentId를 지정하고, $set 안에서 점 표기법('StudentDetails.StudentName')을 사용해 자식 객체의 특정 필드만 변경합니다.

> db.demo21.update({"StudentId":'STU-101'},{$set:{'StudentDetails.StudentName':'Robert'}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

4단계: 업데이트 결과 확인

다시 find() 메서드로 전체 문서를 조회해 변경 사항을 확인합니다.

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

출력 결과를 보면 StudentName만 'Chris'에서 'Robert'로 변경되었고, 나머지 필드(StudentAge 등)는 그대로 유지된 것을 알 수 있습니다.

{
   "_id" : ObjectId("5e14be8922d07d3b95082e6f"),
   "StudentId" : "STU-101",
   "StudentDetails" : {
      "StudentName" : "Robert",
      "StudentAge" : 21
   }
}

정리 및 참고 사항

  • $set 연산자: 문서의 특정 필드 값만 변경하며, 지정하지 않은 다른 필드는 영향을 받지 않습니다.
  • 점 표기법: '부모필드.자식필드' 형식으로 중첩된 객체의 경로를 정확히 지정해야 합니다.
  • updateOne 권장: 최신 MongoDB 버전에서는 deprecated된 update() 대신 updateOne(), updateMany() 사용을 권장합니다.

이처럼 $set과 점 표기법을 함께 사용하면 자식 객체 전체를 교체하지 않고도 필요한 필드만 효율적으로 업데이트할 수 있습니다.