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

MongoDB 내장 문서의 필드 값을 증가시키는 방법 ($inc 연산자 활용)

MongoDB에서 내장(embedded) 문서 안에 있는 특정 필드의 값을 증가시켜야 하는 경우가 자주 있습니다. 이 글에서는 $inc 연산자와 점(dot) 표기법을 사용하여 중첩된 필드 값을 손쉽게 업데이트하는 방법을 알아보겠습니다.

예제 시나리오

여기서는 StudentDetails 문서 내부에 포함된 StudentScores 필드의 값을 증가시켜 보겠습니다. 대상 문서 구조는 다음과 같습니다.

... "StudentScores": {
...     "StudentMathScore": 90,
...     "StudentMongoDBScore": 78
... }

1단계: 컬렉션 생성 및 문서 삽입

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

> db.embeddedValueIncrementDemo.insertOne(
...     {
...         "StudentDetails": {
...             "StudentScores": {
...                 "StudentMathScore": 90,
...                 "StudentMongoDBScore": 78
...             }
...         }
...     }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd2b670345990cee87fd896")
}

2단계: 저장된 문서 확인

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

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

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

{
    "_id" : ObjectId("5cd2b670345990cee87fd896"),
    "StudentDetails" : {
        "StudentScores" : {
            "StudentMathScore" : 90,
            "StudentMongoDBScore" : 78
        }
    }
}

3단계: $inc 연산자로 내장 필드 값 증가시키기

이제 핵심 단계입니다. $inc 연산자에 점 표기법("StudentDetails.StudentScores.StudentMongoDBScore")을 사용하면 중첩된 깊은 곳의 필드 값도 직접 증가시킬 수 있습니다. 여기서는 StudentMongoDBScore 값을 20만큼 올려보겠습니다.

> db.embeddedValueIncrementDemo.update({ _id: new ObjectId("5cd2b670345990cee87fd896") }, { $inc: { "StudentDetails.StudentScores.StudentMongoDBScore": 20 } }, { upsert: true, safe: true }, null);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

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

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

다시 한번 전체 문서를 조회하여 변경 사항을 확인합니다.

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

출력 결과를 보면 StudentMongoDBScore가 기존 78에서 98로 정상적으로 증가한 것을 확인할 수 있습니다.

{
    "_id" : ObjectId("5cd2b670345990cee87fd896"),
    "StudentDetails" : {
        "StudentScores" : {
            "StudentMathScore" : 90,
            "StudentMongoDBScore" : 98
        }
    }
}

정리

MongoDB에서 내장 문서의 필드 값을 증가시키는 방법을 정리하면 다음과 같습니다.

  • $inc 연산자를 사용하면 지정한 숫자만큼 필드 값을 증가(음수 사용 시 감소)시킬 수 있습니다.
  • 내장 문서의 필드에 접근할 때는 점(.) 표기법으로 경로를 문자열로 감싸 지정합니다. 예: "부모필드.자식필드"
  • upsert: true 옵션을 함께 사용하면 일치하는 문서가 없을 경우 새 문서를 생성할 수도 있습니다.

이처럼 $inc와 점 표기법만 익히면, 아무리 깊게 중첩된 문서라도 복잡한 로직 없이 간단하게 원자적(atomic)으로 값을 업데이트할 수 있습니다.