MongoDB에서 문서의 필드 값을 서로 빼고 싶다면 aggregate() 메서드와 함께 $subtract 연산자를 사용하면 됩니다. 이 연산자는 집계 파이프라인 내에서 두 필드 값의 차이를 계산해 새로운 필드로 출력할 수 있어 매우 유용합니다.
1. 샘플 컬렉션 생성하기
먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.demo599.insertOne({"TotalPrice":250,"DiscountPrice":35});{
"acknowledged" : true, "insertedId" : ObjectId("5e948192f5f1e70e134e2696")
}
> db.demo599.insertOne({"TotalPrice":400,"DiscountPrice":10});{
"acknowledged" : true, "insertedId" : ObjectId("5e948199f5f1e70e134e2697")
}
> db.demo599.insertOne({"TotalPrice":1550,"DiscountPrice":50});{
"acknowledged" : true, "insertedId" : ObjectId("5e9481a0f5f1e70e134e2698")
}2. 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo599.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e948192f5f1e70e134e2696"), "TotalPrice" : 250, "DiscountPrice" : 35 }
{ "_id" : ObjectId("5e948199f5f1e70e134e2697"), "TotalPrice" : 400, "DiscountPrice" : 10 }
{ "_id" : ObjectId("5e9481a0f5f1e70e134e2698"), "TotalPrice" : 1550, "DiscountPrice" : 50 }3. $subtract로 필드 값 차감하기
이제 $project 단계와 $subtract 연산자를 조합하여 TotalPrice에서 DiscountPrice를 뺀 실제 가격(ActualPrice)을 계산하는 쿼리를 작성해 보겠습니다.
> db.demo599.aggregate( [ { $project: {ActualPrice: { $subtract: [ "$TotalPrice", "$DiscountPrice" ] } } } ] )쿼리를 실행하면 각 문서마다 할인이 적용된 최종 가격이 계산되어 다음과 같이 출력됩니다.
{ "_id" : ObjectId("5e948192f5f1e70e134e2696"), "ActualPrice" : 215 }
{ "_id" : ObjectId("5e948199f5f1e70e134e2697"), "ActualPrice" : 390 }
{ "_id" : ObjectId("5e9481a0f5f1e70e134e2698"), "ActualPrice" : 1500 }정리
MongoDB에서 필드 간 산술 연산이 필요할 때는 aggregate() 파이프라인 안에서 $project와 $subtract를 함께 사용하는 것이 표준적인 방법입니다. 위 예시처럼 배열 형태로 ["$필드명1", "$필드명2"]를 전달하면 첫 번째 값에서 두 번째 값이 차감된 결과를 새로운 필드로 손쉽게 얻을 수 있습니다.