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

MongoDB에서 중첩 객체의 값을 증가시키는 방법 – $inc 연산자 활용 가이드

MongoDB에서 중첩 객체의 값을 증가시키는 방법 ($inc 연산자)

MongoDB에서 배열 안에 포함된 중첩 객체(nested object)의 특정 필드 값을 증가시켜야 할 때는 $inc 연산자위치 연산자($)를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 자세히 살펴보겠습니다.

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

먼저 insertOne() 메서드를 사용하여 학생 정보가 담긴 문서를 삽입하고 컬렉션을 생성합니다. 여기서 StudentDetails는 배열 형태의 중첩 객체로, 과목명과 수학 점수를 포함하고 있습니다.

> db.incrementValueDemo.insertOne({"StudentName":"Larry","StudentCountryName":"US","StudentDetails":[{"StudentSubjectName":"Math","StudentMathMarks":79}]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c986ca0330fd0aa0d2fe4a2")
}

2단계: 저장된 문서 확인

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

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

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{
    "_id" : ObjectId("5c986ca0330fd0aa0d2fe4a2"),
    "StudentName" : "Larry",
    "StudentCountryName" : "US",
    "StudentDetails" : [
       {
           "StudentSubjectName" : "Math",
           "StudentMathMarks" : 79
       }
    ]
}

3단계: $inc 연산자로 중첩 객체의 값 증가시키기

이제 핵심 부분입니다. 조건으로 "StudentDetails.StudentSubjectName"이 "Math"인 문서를 찾은 뒤, 업데이트 구문에서 위치 연산자($)를 사용해 해당 배열 요소의 StudentMathMarks 값을 1만큼 증가시킵니다.

> db.incrementValueDemo.update({"StudentDetails.StudentSubjectName":"Math"}, { $inc : {
    "StudentDetails.$.StudentMathMarks" : 1 } });
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과에서 nMatched가 1, nModified가 1로 표시되면 하나의 문서가 성공적으로 업데이트된 것입니다.

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

다시 find() 메서드를 실행하여 값이 정상적으로 증가했는지 확인합니다.

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

출력 결과를 보면 StudentMathMarks가 기존 79에서 80으로 1 증가한 것을 확인할 수 있습니다.

{
    "_id" : ObjectId("5c986ca0330fd0aa0d2fe4a2"),
    "StudentName" : "Larry",
    "StudentCountryName" : "US",
    "StudentDetails" : [
       {
           "StudentSubjectName" : "Math",
           "StudentMathMarks" : 80
       }
    ]
}

참고 사항

  • 위치 연산자($): 쿼리 조건에 매칭된 첫 번째 배열 요소를 가리킵니다. 여러 개의 배열 요소를 한 번에 수정하려면 all positional operator($[]) 또는 filtered positional operator($[identifier])를 사용해야 합니다.
  • update() 메서드: 최신 MongoDB 버전에서는 update() 대신 updateOne(), updateMany() 사용이 권장됩니다. 동일한 결과를 얻으려면 db.incrementValueDemo.updateOne({조건}, {$inc: {...}}) 형태로 작성하면 됩니다.
  • 값 감소: $inc에 음수를 지정하면 값을 감소시킬 수도 있습니다. 예: {"StudentDetails.$.StudentMathMarks": -1}
  • 필드가 없는 경우: $inc로 업데이트하려는 필드가 문서에 존재하지 않으면 해당 필드가 새로 생성되며 지정한 값으로 설정됩니다.