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

MongoDB에서 특정 인덱스의 배열 객체를 업데이트하는 쿼리 방법

MongoDB에서 배열 객체 업데이트하기

MongoDB에서 배열 안에 포함된 객체를 업데이트하려면 update() 메서드를 사용해야 합니다. 이때 점 표기법(dot notation)과 함께 위치 연산자($)를 활용하는 것이 핵심입니다.

먼저 문서가 담긴 컬렉션을 생성해 보겠습니다.

> db.demo489.insertOne(
... {
...     details : [{
...         id : 101,
...         "Info1" : {
...             "StudentName" : "Chris"
...         },
...         "Info2" : {
...             "TeacherName" : "David"
...         }
...     },
...     {
...         id : 102,
...         "Info1" : {
...             "StudentName" : "Carol"
...         },
...         "Info2" : {
...             "TeacherName" : "Mike"
...         }
...     }]
... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8356e0b0f3fa88e22790ba")
}

컬렉션의 문서 조회하기

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

> db.demo489.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e8356e0b0f3fa88e22790ba"), "details" : [ { "id" : 101, "Info1" : { "StudentName" : "Chris" }, "Info2" : { "TeacherName" : "David" } }, { "id" : 102, "Info1" : { "StudentName" : "Carol" }, "Info2" : { "TeacherName" : "Mike" } } ] }

배열 객체를 업데이트하는 쿼리 작성

다음은 배열 내부의 객체를 업데이트하는 쿼리입니다.

> db.demo489.update({"details.id":102},
...     {$set: {"details.$.Info1.StudentName":"Robert",
...         "details.$.Info2.TeacherName":"John",
...         "details.$.CountryName" : "US"
...     }
... })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

여기서 "details.$"에 사용된 $위치 연산자(positional operator)입니다. 쿼리 조건("details.id": 102)과 일치하는 첫 번째 배열 요소를 가리키며, 이를 통해 해당 요소의 Info1.StudentNameInfo2.TeacherName 값을 수정하고 새로운 필드인 CountryName까지 추가할 수 있습니다.

업데이트 결과 확인

업데이트가 완료되면 다시 find() 메서드로 변경된 문서를 확인합니다.

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

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

{
    "_id" : ObjectId("5e8356e0b0f3fa88e22790ba"),
    "details" : [
        {
            "id" : 101,
            "Info1" : {
                "StudentName" : "Chris"
            },
            "Info2" : {
                "TeacherName" : "David"
            }
        },
        {
            "id" : 102,
            "Info1" : {
                "StudentName" : "Robert"
            },
            "Info2" : {
                "TeacherName" : "John"
            },
            "CountryName" : "US"
        }
    ]
}

결과를 보면 id: 102에 해당하는 배열 요소만 선택적으로 업데이트되었음을 확인할 수 있습니다. 학생 이름이 Robert로, 교사 이름이 John으로 변경되었고, 새로운 필드인 CountryName: "US"가 성공적으로 추가되었습니다. 반면 id: 101 요소는 기존 값 그대로 유지됩니다.