MongoDB에서 여러 필드의 값을 동시에 증가시켜야 하는 경우가 자주 발생합니다. 이럴 때 $inc 연산자를 사용하면 별도의 명령을 여러 번 실행할 필요 없이, 단 하나의 update 명령으로 두 개 이상의 필드를 한꺼번에 업데이트할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.
1단계: 문서가 포함된 컬렉션 생성하기
먼저 insertOne() 메서드를 사용하여 테스트용 문서를 가진 컬렉션을 생성합니다.
> db.incrementDemo.insertOne({"Value1":10,"Value2":20});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbdaf07de8cc557214c0e15")
}2단계: find() 메서드로 전체 문서 조회하기
생성된 컬렉션의 모든 문서를 확인하려면 find() 메서드를 사용합니다. 쿼리는 다음과 같습니다.
> db.incrementDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5cbdaf07de8cc557214c0e15"),
"Value1" : 10,
"Value2" : 20
}3단계: $inc 연산자로 두 필드를 한 번에 증가시키기
이제 핵심 부분입니다. 아래 쿼리처럼 $inc 연산자 안에 증가시키고 싶은 필드들을 나열하면, 하나의 명령만으로 모든 필드의 값을 동시에 증가시킬 수 있습니다.
> db.incrementDemo.update({},{ $inc : { Value1 : 1, Value2 : 1 } });
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })여기서 첫 번째 인자인 빈 객체 {}는 조건 없이 컬렉션 내 모든 문서를 대상으로 한다는 의미이며, Value1과 Value2 각각의 값이 1씩 증가됩니다.
4단계: 결과 확인하기
두 필드의 값이 실제로 1씩 증가했는지 다시 한번 조회하여 확인해 보겠습니다.
> db.incrementDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5cbdaf07de8cc557214c0e15"),
"Value1" : 11,
"Value2" : 21
}출력 결과를 보면 Value1은 10에서 11로, Value2는 20에서 21로 정상적으로 증가한 것을 확인할 수 있습니다.
마무리
이처럼 MongoDB의 $inc 연산자를 사용하면 여러 필드의 값을 아주 간단하게 동시에 증가시킬 수 있습니다. 값 감소가 필요한 경우에는 증분 값에 음수(예: -1)를 지정하기만 하면 되므로, 카운터나 통계 데이터를 관리할 때 매우 유용하게 활용할 수 있습니다.