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

MongoDB에서 필드 값을 증가시키는 방법 – $inc 연산자 완벽 가이드

MongoDB에서 필드 값 증가시키기

MongoDB에서 특정 필드의 값을 증가(또는 감소)시키려면 $inc 연산자를 사용하면 됩니다. $inc는 지정한 숫자만큼 필드 값을 원자적으로(atomically) 더해주는 업데이트 연산자로, 조회수 카운트, 게임 점수 누적 등에 매우 유용하게 활용됩니다.

이번 글에서는 실제 예제를 통해 $inc 연산자의 사용 방법을 단계별로 살펴보겠습니다.

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

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

> db.incrementDemo.insertOne({"PlayerScore":100});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cc81cdd8f9e6ff3eb0ce44e")
}
> db.incrementDemo.insertOne({"PlayerScore":290});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cc81ce28f9e6ff3eb0ce44f")
}
> db.incrementDemo.insertOne({"PlayerScore":560});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cc81ce68f9e6ff3eb0ce450")
}

2단계: 저장된 문서 확인하기

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

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

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

{ "_id" : ObjectId("5cc81cdd8f9e6ff3eb0ce44e"), "PlayerScore" : 100 }
{ "_id" : ObjectId("5cc81ce28f9e6ff3eb0ce44f"), "PlayerScore" : 290 }
{ "_id" : ObjectId("5cc81ce68f9e6ff3eb0ce450"), "PlayerScore" : 560 }

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

이제 update() 메서드와 함께 $inc 연산자를 사용해 특정 문서의 PlayerScore 필드 값을 10만큼 증가시켜 보겠습니다.

> db.incrementDemo.update({ _id:ObjectId("5cc81ce28f9e6ff3eb0ce44f") },{ $inc: {"PlayerScore":10 }});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과를 보면 nMatched가 1, nModified가 1로 표시되는데, 이는 조건에 일치하는 문서 1개가 성공적으로 수정되었음을 의미합니다. 위 쿼리에서는 기존 값인 290에 10을 더해 300으로 업데이트했습니다.

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

다시 find() 메서드로 전체 문서를 조회해 변경 사항을 확인해 보겠습니다.

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

출력 결과를 보면 두 번째 문서의 PlayerScore가 290에서 300으로 증가한 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5cc81cdd8f9e6ff3eb0ce44e"), "PlayerScore" : 100 }
{ "_id" : ObjectId("5cc81ce28f9e6ff3eb0ce44f"), "PlayerScore" : 300 }
{ "_id" : ObjectId("5cc81ce68f9e6ff3eb0ce450"), "PlayerScore" : 560 }

$inc 연산자 사용 시 참고 사항

  • 감소 처리: 음수 값을 지정하면 필드 값을 감소시킬 수 있습니다. 예: { $inc: { "PlayerScore": -10 } }
  • 필드가 없는 경우: 대상 문서에 해당 필드가 존재하지 않으면, 지정한 값으로 새 필드가 자동 생성됩니다.
  • 숫자 타입만 가능: $inc는 숫자 타입 필드에만 사용할 수 있으며, 문자열 등 다른 타입에는 적용할 수 없습니다.
  • 최신 문법 권장: MongoDB 5.0 이상에서는 update()보다 updateOne(), updateMany() 같은 명확한 메서드 사용이 권장됩니다.

이처럼 $inc 연산자를 활용하면 복잡한 로직 없이도 간단하고 안전하게 숫자 필드의 값을 증가 또는 감소시킬 수 있습니다.