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

MongoDB 컬렉션에서 특정 문서를 업데이트하는 쿼리 작성 방법

MongoDB에서 특정 문서 업데이트하기

MongoDB에서 컬렉션 내의 특정 문서를 업데이트하려면 $set 연산자와 함께 update() 메서드를 사용해야 합니다. 이 글에서는 배열 형태로 저장된 문서 중 특정 요소만 선택적으로 수정하는 방법을 단계별로 살펴보겠습니다.

1단계: 테스트용 컬렉션 생성

먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다.

> db.demo135.insertOne({"Details":[{"EmployeeId":101,"EmployeeName":"Chris","EmployeeSalary":45000},{"EmployeeId":102,"EmployeeName":"Chris","EmployeeSalary":45000}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e31a5ddfdf09dd6d085399c")
}

위 쿼리는 직원 정보 두 건을 Details 배열에 담아 하나의 문서로 삽입합니다. 두 직원 모두 이름이 "Chris"이지만, 직원 ID(101, 102)로 구분됩니다.

2단계: 삽입된 문서 확인

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

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

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

{
   "_id" : ObjectId("5e31a5ddfdf09dd6d085399c"),
   "Details" : [
      {
         "EmployeeId" : 101,
         "EmployeeName" : "Chris",
         "EmployeeSalary" : 45000
      },
      {
         "EmployeeId" : 102,
         "EmployeeName" : "Chris",
         "EmployeeSalary" : 45000
      }
   ]
}

3단계: 위치 연산자($)를 활용한 업데이트 쿼리 실행

이제 두 번째 직원(EmployeeId: 102)의 이름을 "John Doe"로 변경해 보겠습니다. 핵심은 위치 연산자($)입니다. 조건절에서 매칭된 배열 요소의 위치를 가리켜 해당 요소만 정확히 수정할 수 있습니다.

> db.demo135.update(
...    {
...       "Details.EmployeeId":102,
...    },
...    {
...       $set: {
...          "Details.$.EmployeeName" : "John Doe"
...       }
...    }
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

쿼리 구조를 살펴보면 다음과 같습니다.

  • 조건부: "Details.EmployeeId": 102 — EmployeeId가 102인 배열 요소를 찾습니다.
  • 업데이트부: $set과 함께 "Details.$.EmployeeName"을 지정합니다. 여기서 $는 조건에 매칭된 첫 번째 배열 요소를 의미합니다.

실행 결과 nMatched: 1, nModified: 1이 반환되었으므로, 하나의 문서가 성공적으로 수정되었습니다.

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

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

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

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

{
   "_id" : ObjectId("5e31a5ddfdf09dd6d085399c"),
   "Details" : [
      {
         "EmployeeId" : 101,
         "EmployeeName" : "Chris",
         "EmployeeSalary" : 45000
      },
      {
         "EmployeeId" : 102,
         "EmployeeName" : "John Doe",
         "EmployeeSalary" : 45000
      }
   ]
}

출력 결과를 보면 EmployeeId가 102인 직원의 이름만 "Chris"에서 "John Doe"로 변경되었고, 나머지 데이터는 그대로 유지된 것을 확인할 수 있습니다.

정리

MongoDB에서 배열 내 특정 요소를 업데이트할 때는 다음 사항을 기억하세요.

  • update() 메서드와 $set 연산자를 함께 사용합니다.
  • 배열 내 특정 요소를 지정하려면 위치 연산자($)를 활용합니다.
  • 위치 연산자는 반드시 조건절에 배열 필드에 대한 매칭 조건이 있어야 동작합니다.
  • 참고로 최신 MongoDB 버전에서는 updateOne(), updateMany() 사용이 권장되며, update()는 deprecated 상태입니다.