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

MongoDB에서 배열 내 객체를 특정 키 기준으로 업데이트하는 방법

MongoDB에서 배열 내 객체를 특정 키 기준으로 업데이트하기

MongoDB에서 문서 내부의 배열에 포함된 객체 값을 수정할 때는 위치 연산자($)$set 연산자를 함께 사용하면 됩니다. 이 방법을 사용하면 조건에 일치하는 배열 요소만 선택적으로 업데이트할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.

1단계: 샘플 데이터로 컬렉션 생성

먼저 insertOne() 메서드를 사용하여 제품 정보 배열을 포함한 문서로 컬렉션을 생성합니다.

> db.demo419.insertOne({"ProductInformation":[{"ProductName":"Product-1","ProductPrice":500},{"ProductName":"Product-2","ProductPrice":600}]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e724762b912067e57771ae8")
}

2단계: find() 메서드로 문서 조회

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

> db.demo419.find();

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

{ "_id" : ObjectId("5e724762b912067e57771ae8"), "ProductInformation" : [ { "ProductName" : "Product-1", "ProductPrice" : 500 }, { "ProductName" : "Product-2", "ProductPrice" : 600 } ] }

3단계: 특정 키로 배열 내 객체 업데이트

다음은 ProductName이 "Product-1"인 배열 요소를 찾아 해당 객체의 ProductPrice 값만 변경하는 쿼리입니다. 조건으로 사용한 필드 경로 뒤에 위치 연산자($)를 붙여 일치하는 요소를 지정합니다.

> db.demo419.update({'ProductInformation.ProductName' : "Product-1" }, { $set : { 'ProductInformation.$.ProductPrice' : 1250}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과 nMatched가 1, nModified가 1로 표시되며, 이는 하나의 문서가 조건에 일치하고 성공적으로 수정되었음을 의미합니다.

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

다시 find() 메서드를 실행하여 변경 사항이 정상적으로 적용되었는지 확인합니다.

> db.demo419.find();

출력 결과를 보면 "Product-1"의 가격만 1250으로 변경되고, 나머지 배열 요소는 그대로 유지됩니다.

{ "_id" : ObjectId("5e724762b912067e57771ae8"), "ProductInformation" : [ { "ProductName" : "Product-1", "ProductPrice" : 1250 }, { "ProductName" : "Product-2", "ProductPrice" : 600 } ] }

참고: 최신 MongoDB 버전에서는 updateOne() 권장

위 예제에서 사용한 update() 메서드는 구버전 방식이며, 현재는 deprecated(사용 중단 권고) 상태입니다. 최신 버전의 MongoDB에서는 동일한 작업을 updateOne() 또는 updateMany() 메서드로 수행하는 것이 좋습니다.

> db.demo419.updateOne(
...   { 'ProductInformation.ProductName': 'Product-1' },
...   { $set: { 'ProductInformation.$.ProductPrice': 1250 } }
... );

이처럼 위치 연산자($)를 활용하면 배열 전체를 교체하지 않고도 원하는 객체의 특정 필드만 효율적으로 수정할 수 있습니다.