MongoDB에서 두 필드의 합계를 다른 필드에 저장하기
MongoDB는 문서(document) 기반 데이터베이스이므로 관계형 데이터베이스의 '열(column)' 개념은 '필드(field)'에 해당합니다. 두 필드의 값을 더한 결과를 새로운 필드에 저장하려면 집계 파이프라인(aggregate)에서 $add 연산자를 사용하면 됩니다.
아래 예제를 통해 단계별로 살펴보겠습니다.
1단계: 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 예제용 컬렉션에 문서를 하나 삽입합니다.
> db.demo291.insertOne({"Value1":10,"Value2":50});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4c0e1e5d93261e4bc9ea2f")
}2단계: find() 메서드로 문서 확인
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo291.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e4c0e1e5d93261e4bc9ea2f"), "Value1" : 10, "Value2" : 50 }3단계: $project와 $add로 두 필드의 합계 계산
이제 aggregate() 안에서 $project 단계를 사용해 기존 필드들을 유지하면서, $add 연산자로 Value1과 Value2의 합을 계산하여 새로운 필드 "Value3"에 저장합니다.
> db.demo291.aggregate(
... { "$project" : {
... 'Value1' : '$Value1',
... 'Value2' : '$Value2',
... 'Value3' : { '$add' : [ '$Value1', '$Value2' ] }
... }
... }
...);
실행 결과
쿼리를 실행하면 Value1(10)과 Value2(50)의 합계인 60이 Value3 필드에 담긴 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5e4c0e1e5d93261e4bc9ea2f"), "Value1" : 10, "Value2" : 50, "Value3" : 60 }정리
$add 연산자는 배열 형태로 여러 숫자 표현식을 전달받아 그 합계를 반환합니다. 이처럼 $project 단계와 함께 사용하면 기존 데이터를 변경하지 않고도 조회 시점에 계산된 새로운 필드를 손쉽게 추가할 수 있습니다. 참고로 이 방식은 실제 문서에 필드를 영구적으로 저장하는 것이 아니라 집계 결과에만 반영되며, 문서 자체를 업데이트하려면 updateMany()와 집계 파이프라인 업데이트(MongoDB 4.2 이상)를 조합해야 합니다.