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

MongoDB에서 위치 연산자($)로 배열의 단일 항목 업데이트하는 방법

MongoDB에서 배열(리스트) 안에 있는 특정 항목 하나만 업데이트하려면 위치 연산자($)를 사용해야 합니다. 이 글에서는 실제 예제를 통해 단일 배열 요소를 업데이트하는 방법을 단계별로 살펴보겠습니다.

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

먼저 예제로 사용할 컬렉션을 만들고 문서를 하나 삽입하겠습니다. insertOne() 메서드를 사용합니다.

> db.updateASingleListDemo.insertOne({ _id:1, "EmployeeName":"Chris", "EmployeeDetails": [{"EmployeeId":"EMP-101","EmployeeSalary": 18999 }] });
{ "acknowledged" : true, "insertedId" : 1 }

위 쿼리는 직원 이름과 함께 직원 상세 정보(사번, 급여)를 배열 형태로 저장하는 문서를 생성합니다.

2. 삽입된 문서 확인

find() 메서드와 pretty() 메서드를 함께 사용하면 컬렉션의 모든 문서를 보기 좋게 출력할 수 있습니다.

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

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

{
    "_id" : 1,
    "EmployeeName" : "Chris",
    "EmployeeDetails" : [
        {
            "EmployeeId" : "EMP-101",
            "EmployeeSalary" : 18999
        }
    ]
}

3. 위치 연산자($)로 단일 항목 업데이트

이제 배열 내 특정 항목만 업데이트해 보겠습니다. 여기서는 사번이 EMP-101인 직원의 급여를 $inc 연산자를 사용해 1 증가시킵니다.

핵심은 쿼리 조건에 _idEmployeeDetails.EmployeeId를 함께 지정하고, 업데이트 부분에서 $(위치 연산자)를 사용해 조건에 일치한 배열 요소를 가리키는 것입니다.

> db.updateASingleListDemo.update({_id: 1, 'EmployeeDetails.EmployeeId': "EMP-101"}, {$inc: {'EmployeeDetails.$.EmployeeSalary': 1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

결과를 보면 nMatched: 1, nModified: 1로 표시되어, 정확히 한 개의 문서에서 한 개의 필드가 성공적으로 수정되었음을 알 수 있습니다.

4. 업데이트 결과 확인

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

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

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

{
    "_id" : 1,
    "EmployeeName" : "Chris",
    "EmployeeDetails" : [
        {
            "EmployeeId" : "EMP-101",
            "EmployeeSalary" : 19000
        }
    ]
}

급여가 기존의 18999에서 19000으로 정상적으로 변경된 것을 확인할 수 있습니다.

정리

MongoDB에서 배열 내 특정 요소만 업데이트할 때는 다음 두 가지가 핵심입니다.

  • 쿼리 조건(find 조건)에 배열 내부 필드의 값을 명시하여 대상 요소를 특정한다.
  • 업데이트 연산자($inc, $set 등)와 함께 위치 연산자 $를 사용해 일치한 첫 번째 배열 요소를 참조한다.

이 방식을 활용하면 배열 전체를 교체하지 않고도 원하는 항목 하나만 효율적으로 수정할 수 있습니다.