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

MongoDB에서 배열 내부의 요소를 업데이트하는 방법 ($set 활용)

MongoDB에서 배열 안에 있는 특정 요소를 업데이트하려면 $set 연산자와 위치 연산자($)를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 자세히 살펴보겠습니다.

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

먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다. CollegeDetails라는 배열 필드에는 대학 이름(CollegeName)과 등록금(Fees) 정보를 담은 두 개의 객체가 들어 있습니다.

> db.demo494.insertOne(
... {
...    "CollegeDetails" : [
...       {
...          "CollegeName" : "MIT",
...          "Fees" : 80000
...       },
...       {
...          "CollegeName" : "SU",
...          "Fees" : 90000
...       }
...    ]
... }
... )
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e84a5c1b0f3fa88e22790c9")
}

2. 컬렉션의 모든 문서 조회

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

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

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

{
   "_id" : ObjectId("5e84a5c1b0f3fa88e22790c9"),
   "CollegeDetails" : [
      {
         "CollegeName" : "MIT",
         "Fees" : 80000
      },
      {
         "CollegeName" : "SU",
         "Fees" : 90000
      }
   ]
}

3. 배열 내부 요소 업데이트하기

다음은 MongoDB에서 배열 내부의 요소를 업데이트하는 쿼리입니다. 조건으로 CollegeName이 "MIT"인 요소를 찾고, 위치 연산자($)를 사용해 해당 요소의 Fees 값을 100000으로 변경합니다.

> db.demo494.update(
...
... {
...    "CollegeDetails.CollegeName": "MIT"
... },
...
... {
...    $set:
...       {
...          "CollegeDetails.$.Fees" : 100000
...       }
...    }
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과 nMatched가 1, nModified가 1로 반환되었으므로, 조건에 일치하는 문서 하나가 성공적으로 수정되었다는 의미입니다.

4. 업데이트 결과 확인

다시 find() 메서드로 모든 문서를 조회하여 변경 사항을 확인합니다.

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

출력 결과를 보면 MIT 대학의 Fees 값이 80000에서 100000으로 성공적으로 변경된 것을 확인할 수 있습니다.

{
   "_id" : ObjectId("5e84a5c1b0f3fa88e22790c9"),
   "CollegeDetails" : [
      {
         "CollegeName" : "MIT",
         "Fees" : 100000
      },
      {
         "CollegeName" : "SU",
         "Fees" : 90000
      }
   ]
}

핵심 정리

배열 내부의 특정 요소를 업데이트할 때는 $set 연산자와 위치 연산자($)를 함께 사용합니다. 위치 연산자는 쿼리 조건에 일치하는 첫 번째 배열 요소를 가리키며, 이를 활용하면 배열 전체를 교체하지 않고도 원하는 요소의 특정 필드만 효율적으로 수정할 수 있습니다.