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

MongoDB에서 중첩된 내부 필드를 업데이트하는 방법

MongoDB에서 내부 필드 업데이트하기

MongoDB에서 문서의 내부(중첩) 필드를 업데이트하려면 update() 메서드와 $set 연산자를 함께 사용하고, 점(.) 표기법으로 외부 필드 이름과 내부 필드 이름을 연결하면 됩니다.

기본 문법은 다음과 같습니다.

db.yourCollectionName.update({"_id" : yourObjectId},
{$set : {"yourOuterFieldName.yourInnerFieldName" : yourValue}});

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

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

먼저 컬렉션을 생성하고 학생 정보가 담긴 문서를 삽입합니다.

> db.updateDocumentDemo.insertOne(
...   {
...      "StudentDetails" : {
...         "StudentFirstName" : "Adam",
...         "StudentLastName" : "Samith"
...      },
...      "StudentOtherDetails" : {
...         "StudentFavouriteSubject" : "MySQL",
...         "StudentScore" : 45
...      }
...   }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd50bb32cba06f46efe9efe")
}

2. 문서 조회

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

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

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

{
    "_id" : ObjectId("5cd50bb32cba06f46efe9efe"),
    "StudentDetails" : {
        "StudentFirstName" : "Adam",
        "StudentLastName" : "Samith"
    },
    "StudentOtherDetails" : {
        "StudentFavouriteSubject" : "MySQL",
        "StudentScore" : 45
    }
}

3. 내부 필드 업데이트 실행

이제 점(.) 표기법을 활용해 중첩된 필드인 StudentFavouriteSubject의 값을 "MySQL"에서 "MongoDB"로 변경해 보겠습니다.

> db.updateDocumentDemo.update({"_id" : ObjectId("5cd50bb32cba06f46efe9efe")},
... {$set : {"StudentOtherDetails.StudentFavouriteSubject" :"MongoDB"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과에서 nModified가 1로 표시되면 해당 문서가 정상적으로 수정되었다는 의미입니다.

4. 업데이트 결과 확인

문서를 다시 조회하여 변경 사항이 제대로 반영되었는지 확인해 보겠습니다.

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

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

{
    "_id" : ObjectId("5cd50bb32cba06f46efe9efe"),
    "StudentDetails" : {
        "StudentFirstName" : "Adam",
        "StudentLastName" : "Samith"
    },
    "StudentOtherDetails" : {
        "StudentFavouriteSubject" : "MongoDB",
        "StudentScore" : 45
    }
}

결과를 보면 StudentOtherDetails 객체 안에 있는 StudentFavouriteSubject 값만 "MySQL"에서 "MongoDB"로 성공적으로 변경된 것을 확인할 수 있습니다. 이처럼 점(.) 표기법과 $set 연산자를 조합하면 전체 문서를 교체하지 않고도 원하는 내부 필드만 선택적으로 수정할 수 있습니다.