MongoDB에서 문자열 합계 계산하기
MongoDB에서 문자열로 저장된 숫자 값의 합계를 구하려면 aggregate() 메서드와 함께 $toInt 연산자를 사용하면 됩니다. 문자열 형태의 가격 데이터를 숫자로 변환한 후 $sum으로 더하는 방식입니다.
먼저 예제에 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.
> db.demo71.insertOne({"Price":"20"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e29af210912fae76b13d76e")
}
> db.demo71.insertOne({"Price":"50"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e29af240912fae76b13d76f")
}
> db.demo71.insertOne({"Price":"20"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e29af270912fae76b13d770")
}
> db.demo71.insertOne({"Price":"10"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e29af2d0912fae76b13d771")
}저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo71.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e29af210912fae76b13d76e"), "Price" : "20" }
{ "_id" : ObjectId("5e29af240912fae76b13d76f"), "Price" : "50" }
{ "_id" : ObjectId("5e29af270912fae76b13d770"), "Price" : "20" }
{ "_id" : ObjectId("5e29af2d0912fae76b13d771"), "Price" : "10" }Price 필드가 따옴표로 묶여 있는 것을 볼 수 있듯이, 값이 문자열 타입으로 저장되어 있습니다.
문자열 합계를 구하는 집계 쿼리
다음은 MongoDB에서 문자열 값의 합계를 계산하는 쿼리입니다. $group 단계에서 _id를 null로 지정해 전체 문서를 하나의 그룹으로 묶고, $toInt로 Price 필드를 정수로 변환한 뒤 $sum으로 합산합니다.
> db.demo71.aggregate([
... {
... $group: {
... _id: null,
... TotalPrice: {
... $sum: {
... $toInt: "$Price"
... }
... }
... }
... }
... ]);쿼리 실행 결과는 다음과 같습니다.
{ "_id" : null, "TotalPrice" : 100 }결과를 보면 문자열로 저장된 가격들(20 + 50 + 20 + 10)이 정상적으로 변환되어 합계 100이 출력된 것을 확인할 수 있습니다.
참고 사항
$toInt 연산자는 MongoDB 4.0 이상에서 사용할 수 있습니다. 만약 변환할 수 없는 문자열이 포함되어 있으면 오류가 발생하므로, 데이터에 유효하지 않은 값이 섞여 있을 가능성이 있다면 $convert 연산자에 onError 옵션을 사용하는 것이 안전합니다. 또한 소수점이 포함된 값이라면 $toDouble을 사용하는 것이 적절합니다.