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

MongoDB에서 중첩 문서(Nested Document)를 업데이트하는 방법

MongoDB에서 중첩 문서 업데이트하기

MongoDB에서 중첩(nested)되어 있는 문서의 특정 필드를 수정하려면 update() 메서드를 사용하고, 그 안에서 점 표기법(dot notation)을 활용하면 됩니다. 점 표기법은 상위 필드와 하위 필드를 마침표(.)로 연결하여 내부에 위치한 값에 직접 접근할 수 있게 해주는 방식입니다.

1. 컬렉션 생성 및 문서 삽입

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

> db.demo607.insertOne(
   {
      id: 1,
      "Info1": {
         "Name": "Chris",
         "Age": 21,

         "Info2": {
            "SubjectName": "MongoDB",
            "Marks": 89
         }
      }
   }
);
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e9742a5f57d0dc0b182d62a")
}

위 문서는 Info1 객체 안에 다시 Info2 객체가 포함된 이중으로 중첩된 구조입니다. 즉, 최대 두 단계 깊이까지 중첩된 문서입니다.

2. 현재 데이터 확인

find() 메서드를 사용하여 컬렉션의 모든 문서를 조회합니다.

> db.demo607.find();

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

{ "_id" : ObjectId("5e9742a5f57d0dc0b182d62a"), "id" : 1, "Info1" :
   { "Name" : "Chris", "Age" : 21, "Info2" : { "SubjectName" : "MongoDB", "Marks" : 89 } }
}

현재 Marks 값은 89로 저장되어 있습니다.

3. 중첩 문서 업데이트 쿼리 실행

이제 중첩된 문서를 업데이트하는 핵심 쿼리입니다. 조건으로 {id: 1}을 지정하고, $set 연산자와 함께 점 표기법 "Info1.Info2.Marks"를 사용하여 값을 변경합니다.

> db.demo607.update({id:1},{$set:{"Info1.Info2.Marks":90}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

결과 메시지를 보면 nMatched: 1(조건에 일치한 문서 1개), nModified: 1(실제로 수정된 문서 1개)로 표시되며, 정상적으로 업데이트가 완료되었음을 알 수 있습니다.

4. 업데이트 결과 확인

find() 메서드와 pretty()를 함께 사용하여 결과를 보기 좋게 출력해 확인합니다.

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

출력 결과는 다음과 같습니다.

{
   "_id" : ObjectId("5e9742a5f57d0dc0b182d62a"),
   "id" : 1,
   "Info1" : {
      "Name" : "Chris",
      "Age" : 21,
      "Info2" : {
         "SubjectName" : "MongoDB",
         "Marks" : 90
      }
   }
}

Marks 값이 기존의 89에서 90으로 성공적으로 변경된 것을 확인할 수 있습니다.

정리

MongoDB에서 중첩 문서를 업데이트할 때는 다음 사항을 기억하세요.

  • update() 메서드(또는 MongoDB 4.2 이상에서 권장되는 updateOne(), updateMany())를 사용합니다.
  • 수정하려는 하위 필드까지 경로를 점 표기법으로 명확히 지정해야 합니다. 예: "Info1.Info2.Marks"
  • $set 연산자를 사용하면 해당 필드만 정확히 변경되고, 문서의 나머지 구조에는 영향을 주지 않습니다.

참고로 따옴표 없이 Info1.Info2.Marks처럼 작성해도 동작하지만, 필드 이름에 공백이나 특수문자가 포함된 경우를 대비해 따옴표로 감싸는 것이 더 안전한 습관입니다.